gem5/src/Doxyfile

1539 lines
64 KiB
Text
Raw Normal View History

# Doxyfile 1.6.3
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
#
# All text after a hash (#) is considered a comment and will be ignored
# The format is:
# TAG = value [value, ...]
# For lists items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (" ")
#---------------------------------------------------------------------------
# Project related configuration options
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
#---------------------------------------------------------------------------
# This tag specifies the encoding used for all characters in the config file
# that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
# http://www.gnu.org/software/libiconv for the list of possible encodings.
DOXYFILE_ENCODING = UTF-8
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
PROJECT_NAME = gem5
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER =
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.
OUTPUT_DIRECTORY = doxygen
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
# 4096 sub-directories (in 2 levels) under the output directory of each output
# format and will distribute the generated files over these directories.
# Enabling this option can be useful when feeding doxygen a huge amount of
# source files, where putting all generated files in the same directory would
# otherwise cause performance problems for the file system.
CREATE_SUBDIRS = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# The default language is English, other supported languages are:
# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese,
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
OUTPUT_LANGUAGE = English
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
# include brief member descriptions after the members that are listed in
# the file and class documentation (similar to JavaDoc).
# Set to NO to disable this.
BRIEF_MEMBER_DESC = YES
# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
# the brief description of a member or function before the detailed description.
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
REPEAT_BRIEF = YES
# This tag implements a quasi-intelligent brief description abbreviator
# that is used to form the text in various listings. Each string
# in this list, if found as the leading text of the brief description, will be
# stripped from the text and the result after processing the whole list, is
# used as the annotated text. Otherwise, the brief description is used as-is.
# If left blank, the following values are used ("$name" is automatically
# replaced with the name of the entity): "The $name class" "The $name widget"
# "The $name file" "is" "provides" "specifies" "contains"
# "represents" "a" "an" "the"
ABBREVIATE_BRIEF =
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# Doxygen will generate a detailed section even if there is only a brief
# description.
ALWAYS_DETAILED_SEC = YES
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
INLINE_INHERITED_MEMB = NO
# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.
FULL_PATH_NAMES = YES
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user-defined part of the path. Stripping is
# only done if one of the specified strings matches the left-hand part of
# the path. It is allowed to use relative paths in the argument list.
# If left blank the directory from which doxygen is run is used as the
# path to strip.
STRIP_FROM_PATH = .
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
# the path mentioned in the documentation of a class, which tells
# the reader which header file to include in order to use a class.
# If left blank only the name of the header file containing the class
# definition is used. Otherwise one should specify the include paths that
# are normally passed to the compiler using the -I flag.
STRIP_FROM_INC_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
# (but less readable) file names. This can be useful is your file systems
# doesn't support long names like on DOS, Mac, or CD-ROM.
SHORT_NAMES = NO
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
# will interpret the first line (until the first dot) of a JavaDoc-style
# comment as the brief description. If set to NO, the JavaDoc
# comments will behave just like the Qt-style comments (thus requiring an
# explicit @brief command for a brief description.
JAVADOC_AUTOBRIEF = YES
# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
# interpret the first line (until the first dot) of a Qt-style
# comment as the brief description. If set to NO, the comments
# will behave just like regular Qt-style comments (thus requiring
# an explicit \brief command for a brief description.)
QT_AUTOBRIEF = YES
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
# treat a multi-line C++ special comment block (i.e. a block of //! or ///
# comments) as a brief description. This used to be the default behaviour.
# The new default is to treat a multi-line C++ comment block as a detailed
# description. Set this tag to YES if you prefer the old behaviour instead.
MULTILINE_CPP_IS_BRIEF = NO
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
# member inherits the documentation from any documented member that it
# re-implements.
INHERIT_DOCS = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
DISTRIBUTE_GROUP_DOC = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab.
# Doxygen uses this value to replace tabs by spaces in code fragments.
TAB_SIZE = 8
# This tag can be used to specify a number of aliases that acts
# as commands in the documentation. An alias has the form "name=value".
# For example adding "sideeffect=\par Side Effects:\n" will allow you to
# put the command \sideeffect (or @sideeffect) in the documentation, which
# will result in a user-defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines.
ALIASES =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C.
# For instance, some of the names that are used will be different. The list
# of all members will be omitted, etc.
OPTIMIZE_OUTPUT_FOR_C = NO
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
# sources only. Doxygen will then generate output that is more tailored for
# Java. For instance, namespaces will be presented as packages, qualified
# scopes will look different, etc.
OPTIMIZE_OUTPUT_JAVA = NO
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources only. Doxygen will then generate output that is more tailored for
# Fortran.
OPTIMIZE_FOR_FORTRAN = NO
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for
# VHDL.
OPTIMIZE_OUTPUT_VHDL = NO
# Doxygen selects the parser to use depending on the extension of the files it parses.
# With this tag you can assign which parser to use for a given extension.
# Doxygen has a built-in mapping, but you can override or extend it using this tag.
# The format is ext=language, where ext is a file extension, and language is one of
# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
EXTENSION_MAPPING =
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should
# set this tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
# func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
BUILTIN_STL_SUPPORT = NO
# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
CPP_CLI_SUPPORT = NO
# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
# Doxygen will parse them like normal C++ but will assume all classes use public
# instead of private inheritance when no explicit protection keyword is present.
SIP_SUPPORT = NO
# For Microsoft's IDL there are propget and propput attributes to indicate getter
# and setter methods for a property. Setting this option to YES (the default)
# will make doxygen to replace the get and set methods by a property in the
# documentation. This will only work if the methods are indeed getting or
# setting a simple type. If this is not the case, or you want to show the
# methods anyway, you should set this option to NO.
IDL_PROPERTY_SUPPORT = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
DISTRIBUTE_GROUP_DOC = NO
# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
# the same type (for instance a group of public functions) to be put as a
# subgroup of that type (e.g. under the Public Functions section). Set it to
# NO to prevent subgrouping. Alternatively, this can be done per class using
# the \nosubgrouping command.
SUBGROUPING = YES
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
# is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically
# be useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
TYPEDEF_HIDES_STRUCT = NO
# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
# determine which symbols to keep in memory and which to flush to disk.
# When the cache is full, less often used symbols will be written to disk.
# For small to medium size projects (<1000 input files) the default value is
# probably good enough. For larger projects a too small cache size can cause
# doxygen to be busy swapping symbols to and from disk most of the time
# causing a significant performance penality.
# If the system has enough physical memory increasing the cache will improve the
# performance by keeping more symbols in memory. Note that the value works on
# a logarithmic scale so increasing the size by one will rougly double the
# memory usage. The cache size is given by this formula:
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
# corresponding to a cache size of 2^16 = 65536 symbols
SYMBOL_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available.
# Private class members and static file members will be hidden unless
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
EXTRACT_ALL = YES
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
# will be included in the documentation.
EXTRACT_PRIVATE = YES
# If the EXTRACT_STATIC tag is set to YES all static members of a file
# will be included in the documentation.
EXTRACT_STATIC = YES
# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
# defined locally in source files will be included in the documentation.
# If set to NO only classes defined in header files are included.
EXTRACT_LOCAL_CLASSES = YES
# This flag is only useful for Objective-C code. When set to YES local
# methods, which are defined in the implementation section but not in
# the interface are included in the documentation.
# If set to NO (the default) only methods in the interface are included.
EXTRACT_LOCAL_METHODS = NO
# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base
# name of the file that contains the anonymous namespace. By default
# anonymous namespace are hidden.
EXTRACT_ANON_NSPACES = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
# undocumented members of documented classes, files or namespaces.
# If set to NO (the default) these members will be included in the
# various overviews, but no documentation section is generated.
# This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy.
# If set to NO (the default) these classes will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_CLASSES = YES
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
# friend (class|struct|union) declarations.
# If set to NO (the default) these declarations will be included in the
# documentation.
HIDE_FRIEND_COMPOUNDS = NO
# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
# documentation blocks found inside the body of a function.
# If set to NO (the default) these blocks will be appended to the
# function's detailed documentation block.
HIDE_IN_BODY_DOCS = NO
# The INTERNAL_DOCS tag determines if documentation
# that is typed after a \internal command is included. If the tag is set
# to NO (the default) then the documentation will be excluded.
# Set it to YES to include the internal documentation.
INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
# file names in lower-case letters. If set to YES upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# users are advised to set this option to NO.
CASE_SENSE_NAMES = YES
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
# will show members with their full class and namespace scopes in the
# documentation. If set to YES the scope will be hidden.
HIDE_SCOPE_NAMES = NO
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
# will put a list of the files that are included by a file in the documentation
# of that file.
SHOW_INCLUDE_FILES = YES
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
# is inserted in the documentation for inline members.
INLINE_INFO = YES
# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
# will sort the (detailed) documentation of file and class members
# alphabetically by member name. If set to NO the members will appear in
# declaration order.
SORT_MEMBER_DOCS = YES
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
# brief documentation of file, namespace and class members alphabetically
# by member name. If set to NO (the default) the members will appear in
# declaration order.
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
SORT_BRIEF_DOCS = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
SORT_MEMBERS_CTORS_1ST = NO
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
# hierarchy of group names into alphabetical order. If set to NO (the default)
# the group names will appear in their defined order.
SORT_GROUP_NAMES = NO
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
# sorted by fully-qualified names, including namespaces. If set to
# NO (the default), the class list will be sorted only by class name,
# not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the
# alphabetical list.
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
SORT_BY_SCOPE_NAME = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.
GENERATE_TODOLIST = YES
# The GENERATE_TESTLIST tag can be used to enable (YES) or
# disable (NO) the test list. This list is created by putting \test
# commands in the documentation.
GENERATE_TESTLIST = YES
# The GENERATE_BUGLIST tag can be used to enable (YES) or
# disable (NO) the bug list. This list is created by putting \bug
# commands in the documentation.
GENERATE_BUGLIST = YES
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
# disable (NO) the deprecated list. This list is created by putting
# \deprecated commands in the documentation.
GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
# the initial value of a variable or define consists of for it to appear in
# the documentation. If the initializer consists of more lines than specified
# here it will be hidden. Use a value of 0 to hide initializers completely.
# The appearance of the initializer of individual variables and defines in the
# documentation can be controlled using \showinitializer or \hideinitializer
# command in the documentation regardless of this setting.
MAX_INITIALIZER_LINES = 30
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
# at the bottom of the documentation of classes and structs. If set to YES the
# list will mention the files that were used to generate the documentation.
SHOW_USED_FILES = YES
# If the sources in your project are distributed over multiple directories
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
# in the documentation. The default is NO.
SHOW_DIRECTORIES = NO
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
# This will remove the Files entry from the Quick Index and from the
# Folder Tree View (if specified). The default is YES.
SHOW_FILES = YES
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
# Namespaces page.
# This will remove the Namespaces entry from the Quick Index
# and from the Folder Tree View (if specified). The default is YES.
SHOW_NAMESPACES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command <command> <input-file>, where <command> is the value of
# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
# provided by doxygen. Whatever the program writes to standard output
# is used as the file version. See the manual for examples.
FILE_VERSION_FILTER =
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
# doxygen. The layout file controls the global structure of the generated output files
# in an output format independent way. The create the layout file that represents
# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
# file name after the option, if omitted DoxygenLayout.xml will be used as the name
# of the layout file.
LAYOUT_FILE =
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
# The QUIET tag can be used to turn on/off the messages that are generated
# by doxygen. Possible values are YES and NO. If left blank NO is used.
QUIET = YES
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated by doxygen. Possible values are YES and NO. If left blank
# NO is used.
WARNINGS = YES
# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
# automatically be disabled.
WARN_IF_UNDOCUMENTED = YES
# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some
# parameters in a documented function, or documenting parameters that
# don't exist or using markup commands wrongly.
WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be abled to get warnings for
# functions that are documented, but have no documentation for their parameters
# or return value. If set to NO (the default) doxygen will only warn about
# wrong or incomplete parameter documentation, but not about the absence of
# documentation.
WARN_NO_PARAMDOC = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The WARN_FORMAT tag determines the format of the warning messages that
# doxygen can produce. The string should contain the $file, $line, and $text
# tags, which will be replaced by the file and line number from which the
# warning originated and the warning text.
WARN_FORMAT = "$file:$line: $text"
# The WARN_LOGFILE tag can be used to specify a file to which warning
# and error messages should be written. If left blank the output is written
# to stderr.
WARN_LOGFILE =
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
# The INPUT tag can be used to specify the files and/or directories that contain
# documented source files. You may enter file names like "myfile.cpp" or
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
INPUT = .
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
# also the default input encoding. Doxygen uses libiconv (or the iconv built
# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
# the list of possible encodings.
INPUT_ENCODING = UTF-8
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank the following patterns are tested:
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
FILE_PATTERNS = *.c \
*.cc \
*.h \
*.hh \
*.doxygen
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
# If left blank NO is used.
RECURSIVE = YES
# The EXCLUDE tag can be used to specify files and/or directories that should
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
EXCLUDE = build \
configs \
setup \
PENDING \
RESYNC
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
# that are symbolic links (a Unix filesystem feature) are excluded from the input.
EXCLUDE_SYMLINKS = YES
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
EXCLUDE_PATTERNS = */BitKeeper/* \
*/Attic/* \
*/SCCS/*
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test
EXCLUDE_SYMBOLS =
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The EXAMPLE_PATH tag can be used to specify one or more files or
# directories that contain example code fragments that are included (see
# the \include command).
EXAMPLE_PATH =
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank all files are included.
EXAMPLE_PATTERNS =
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude
# commands irrespective of the value of the RECURSIVE tag.
# Possible values are YES and NO. If left blank NO is used.
EXAMPLE_RECURSIVE = NO
# The IMAGE_PATH tag can be used to specify one or more files or
# directories that contain image that are included in the documentation (see
# the \image command).
IMAGE_PATH = doxygen/images
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command <filter> <input-file>, where <filter>
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
# input file. Doxygen will then use the output that the filter program writes
# to standard output.
INPUT_FILTER =
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis.
# Doxygen will compare the file name with each pattern and apply the
# filter if there is a match.
# The filters are a list of the form:
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
# is applied to all files.
FILTER_PATTERNS =
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will be used to filter the input files when producing source
# files to browse (i.e. when SOURCE_BROWSER is set to YES).
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will
# be generated. Documented entities will be cross-referenced with these sources.
# Note: To get rid of all source code in the generated output, make sure also
# VERBATIM_HEADERS is set to NO.
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
SOURCE_BROWSER = YES
# Setting the INLINE_SOURCES tag to YES will include the body
# of functions and classes directly in the documentation.
INLINE_SOURCES = NO
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
# doxygen to hide any special comment blocks from generated source code
# fragments. Normal C and C++ comments will always remain visible.
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES (the default)
# then for each documented function all documented
# functions referencing it will be listed.
REFERENCED_BY_RELATION = YES
# If the REFERENCES_RELATION tag is set to YES (the default)
# then for each documented function all documented entities
# called/used by that function will be listed.
REFERENCES_RELATION = YES
# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
# link to the source code.
# Otherwise they will link to the documentation.
REFERENCES_LINK_SOURCE = YES
# If the USE_HTAGS tag is set to YES then the references to source code
# will point to the HTML generated by the htags(1) tool instead of doxygen
# built-in source browser. The htags tool is part of GNU's global source
# tagging system (see http://www.gnu.org/software/global/global.html). You
# will need version 4.8.6 or higher.
USE_HTAGS = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
# will generate a verbatim copy of the header file for each class for
# which an include is specified. Set to NO to disable this.
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
# of all compounds will be generated. Enable this if the project
# contains a lot of classes, structs, unions or interfaces.
ALPHABETICAL_INDEX = YES
# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
# in which this list will be split (can be a number in the range [1..20])
COLS_IN_ALPHA_INDEX = 3
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# In case all classes in a project start with a common prefix, all
# classes will be put under the same header in the alphabetical index.
# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
# should be ignored while generating the index headers.
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
# generate HTML output.
GENERATE_HTML = YES
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `html' will be used as the default path.
HTML_OUTPUT = html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
# doxygen will generate files with .html extension.
HTML_FILE_EXTENSION = .html
# The HTML_HEADER tag can be used to specify a personal HTML header for
# each generated HTML page. If it is left blank doxygen will generate a
# standard header.
HTML_HEADER =
# The HTML_FOOTER tag can be used to specify a personal HTML footer for
# each generated HTML page. If it is left blank doxygen will generate a
# standard footer.
HTML_FOOTER = doxygen/footer.html
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
# style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen
# will generate a default style sheet. Note that doxygen will try to copy
# the style sheet file to the HTML output directory, so don't put your own
# stylesheet in the HTML output directory as well, or it will be erased!
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
HTML_STYLESHEET =
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting
# this to NO can help when comparing the output of multiple runs.
HTML_TIMESTAMP = YES
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to
# NO a bullet list will be used.
HTML_ALIGN_MEMBERS = YES
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded. For this to work a browser that supports
# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
HTML_DYNAMIC_SECTIONS = NO
# If the GENERATE_DOCSET tag is set to YES, additional index files
# will be generated that can be used as input for Apple's Xcode 3
# integrated development environment, introduced with OSX 10.5 (Leopard).
# To create a documentation set, doxygen will generate a Makefile in the
# HTML output directory. Running make will produce the docset in that
# directory and running "make install" will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
# it at startup.
# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
GENERATE_DOCSET = NO
# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
# feed. A documentation feed provides an umbrella under which multiple
# documentation sets from a single provider (such as a company or product suite)
# can be grouped.
DOCSET_FEEDNAME = "Doxygen generated docs"
# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
# should uniquely identify the documentation set bundle. This should be a
# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
# will append .docset to the name.
DOCSET_BUNDLE_ID = org.doxygen.Project
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the GENERATE_HTMLHELP tag is set to YES, additional index files
# will be generated that can be used as input for tools like the
# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
# of the generated HTML documentation.
GENERATE_HTMLHELP = NO
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
# be used to specify the file name of the resulting .chm file. You
# can add a path in front of the file if the result should not be
# written to the html output directory.
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
CHM_FILE =
# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
# be used to specify the location (absolute path including file name) of
# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
# the HTML help compiler on the generated index.hhp.
HHC_LOCATION =
# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
# controls if a separate .chi index file is generated (YES) or that
# it should be included in the master .chm file (NO).
GENERATE_CHI = NO
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
# is used to encode HtmlHelp index (hhk), content (hhc) and project file
# content.
CHM_INDEX_ENCODING =
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
# controls whether a binary table of contents is generated (YES) or a
# normal table of contents (NO) in the .chm file.
BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members
# to the contents of the HTML help documentation and to the tree view.
TOC_EXPAND = NO
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
# are set, an additional index file will be generated that can be used as input for
# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
# HTML documentation.
GENERATE_QHP = NO
# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
# be used to specify the file name of the resulting .qch file.
# The path specified is relative to the HTML output folder.
QCH_FILE =
# The QHP_NAMESPACE tag specifies the namespace to use when generating
# Qt Help Project output. For more information please see
# http://doc.trolltech.com/qthelpproject.html#namespace
QHP_NAMESPACE = org.doxygen.Project
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
# Qt Help Project output. For more information please see
# http://doc.trolltech.com/qthelpproject.html#virtual-folders
QHP_VIRTUAL_FOLDER = doc
# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
# For more information please see
# http://doc.trolltech.com/qthelpproject.html#custom-filters
QHP_CUST_FILTER_NAME =
# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
QHP_CUST_FILTER_ATTRS =
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
# filter section matches.
# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
QHP_SECT_FILTER_ATTRS =
# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
# be used to specify the location of Qt's qhelpgenerator.
# If non-empty doxygen will try to run qhelpgenerator on the generated
# .qhp file.
QHG_LOCATION =
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
# will be generated, which together with the HTML files, form an Eclipse help
# plugin. To install this plugin and make it available under the help contents
# menu in Eclipse, the contents of the directory containing the HTML and XML
# files needs to be copied into the plugins directory of eclipse. The name of
# the directory within the plugins directory should be the same as
# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears.
GENERATE_ECLIPSEHELP = NO
# A unique identifier for the eclipse help plugin. When installing the plugin
# the directory name containing the HTML and XML files should also have
# this name.
ECLIPSE_DOC_ID = org.doxygen.Project
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
# top of each HTML page. The value NO (the default) enables the index and
# the value YES disables it.
DISABLE_INDEX = NO
# This tag can be used to set the number of enum values (range [1..20])
# that doxygen will group on one line in the generated HTML documentation.
ENUM_VALUES_PER_LINE = 4
# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
# generated containing a tree-like index structure (just like the one that
# is generated for HTML Help). For this to work a browser that supports
# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
# probably better off using the HTML help feature.
GENERATE_TREEVIEW = NO
# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
# and Class Hierarchy pages using a tree view instead of an ordered list.
USE_INLINE_TREES = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
# used to set the initial width (in pixels) of the frame in which the tree
# is shown.
TREEVIEW_WIDTH = 250
# Use this tag to change the font size of Latex formulas included
# as images in the HTML documentation. The default is 10. Note that
# when you change the font size after a successful doxygen run you need
# to manually remove any form_*.png images from the HTML output directory
# to force them to be regenerated.
FORMULA_FONTSIZE = 10
# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript
# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should
# typically be disabled. For large projects the javascript based search engine
# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index
# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup
# and does not have live searching capabilities.
SERVER_BASED_SEARCH = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
# generate Latex output.
GENERATE_LATEX = NO
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `latex' will be used as the default path.
LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked. If left blank `latex' will be used as the default command name.
LATEX_CMD_NAME = latex
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
# generate index for LaTeX. If left blank `makeindex' will be used as the
# default command name.
MAKEINDEX_CMD_NAME = makeindex
# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
# LaTeX documents. This may be useful for small projects and may help to
# save some trees in general.
COMPACT_LATEX = NO
# The PAPER_TYPE tag can be used to set the paper type that is used
# by the printer. Possible values are: a4, a4wide, letter, legal and
# executive. If left blank a4wide will be used.
PAPER_TYPE = a4wide
# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
# packages that should be included in the LaTeX output.
EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
# the generated latex document. The header should contain everything until
# the first chapter. If it is left blank doxygen will generate a
# standard header. Notice: only use this tag if you know what you are doing!
LATEX_HEADER =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
# contain links (just like the HTML output) instead of page references
# This makes the output suitable for online browsing using a pdf viewer.
PDF_HYPERLINKS = NO
# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
# plain latex in the generated Makefile. Set this option to YES to get a
# higher quality PDF documentation.
USE_PDFLATEX = NO
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
# command to the generated LaTeX files. This will instruct LaTeX to keep
# running if errors occur, instead of asking the user for help.
# This option is also used when generating formulas in HTML.
LATEX_BATCHMODE = NO
# If LATEX_HIDE_INDICES is set to YES then doxygen will not
# include the index chapters (such as File Index, Compound Index, etc.)
# in the output.
LATEX_HIDE_INDICES = NO
# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.
LATEX_SOURCE_CODE = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
# The RTF output is optimized for Word 97 and may not look very pretty with
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# other RTF readers or editors.
GENERATE_RTF = NO
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `rtf' will be used as the default path.
RTF_OUTPUT = rtf
# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
# RTF documents. This may be useful for small projects and may help to
# save some trees in general.
COMPACT_RTF = NO
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
# will contain hyperlink fields. The RTF file will
# contain links (just like the HTML output) instead of page references.
# This makes the output suitable for online browsing using WORD or other
# programs which support those fields.
# Note: wordpad (write) and others do not support links.
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's
# config file, i.e. a series of assignments. You only have to provide
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# replacements, missing definitions are set to their default value.
RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an rtf document.
# Syntax is similar to doxygen's config file.
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
# generate man pages
GENERATE_MAN = NO
# The MAN_OUTPUT tag is used to specify where the man pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `man' will be used as the default path.
MAN_OUTPUT = man
# The MAN_EXTENSION tag determines the extension that is added to
# the generated man pages (default is the subroutine's section .3)
MAN_EXTENSION = .3
# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
# then it will generate one additional man file for each entity
# documented in the real man page(s). These additional files
# only source the real man page, but without them the man command
# would be unable to find the correct page. The default is NO.
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
# If the GENERATE_XML tag is set to YES Doxygen will
# generate an XML file that captures the structure of
# the code including all documentation.
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
GENERATE_XML = NO
# The XML_OUTPUT tag is used to specify where the XML pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `xml' will be used as the default path.
XML_OUTPUT = xml
# The XML_SCHEMA tag can be used to specify an XML schema,
# which can be used by a validating XML parser to check the
# syntax of the XML files.
XML_SCHEMA =
# The XML_DTD tag can be used to specify an XML DTD,
# which can be used by a validating XML parser to check the
# syntax of the XML files.
XML_DTD =
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
# dump the program listings (including syntax highlighting
# and cross-referencing information) to the XML output. Note that
# enabling this will significantly increase the size of the XML output.
XML_PROGRAMLISTING = YES
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
# generate an AutoGen Definitions (see autogen.sf.net) file
# that captures the structure of the code including all
# documentation. Note that this feature is still experimental
# and incomplete at the moment.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
# If the GENERATE_PERLMOD tag is set to YES Doxygen will
# generate a Perl module file that captures the structure of
# the code including all documentation. Note that this
# feature is still experimental and incomplete at the
# moment.
GENERATE_PERLMOD = NO
# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
# the necessary Makefile rules, Perl scripts and LaTeX code to be able
# to generate PDF and DVI output from the Perl module output.
PERLMOD_LATEX = NO
# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
# nicely formatted so it can be parsed by a human reader. This is useful
# if you want to understand what is going on. On the other hand, if this
# tag is set to NO the size of the Perl module output will be much smaller
# and Perl will parse it just the same.
PERLMOD_PRETTY = YES
# The names of the make variables in the generated doxyrules.make file
# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
# This is useful so different doxyrules.make files included by the same
# Makefile don't overwrite each other's variables.
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
# evaluate all C-preprocessor directives found in the sources and include
# files.
ENABLE_PREPROCESSING = YES
# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
# names in the source code. If set to NO (the default) only conditional
# compilation will be performed. Macro expansion can be done in a controlled
# way by setting EXPAND_ONLY_PREDEF to YES.
MACRO_EXPANSION = NO
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
# then the macro expansion is limited to the macros specified with the
# PREDEFINED and EXPAND_AS_PREDEFINED tags.
EXPAND_ONLY_PREDEF = NO
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
# in the INCLUDE_PATH (see below) will be search if a #include is found.
SEARCH_INCLUDES = YES
# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by
# the preprocessor.
INCLUDE_PATH =
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will
# be used.
INCLUDE_FILE_PATTERNS =
# The PREDEFINED tag can be used to specify one or more macro names that
# are defined before the preprocessor is started (similar to the -D option of
# gcc). The argument of the tag is a list of macros of the form: name
# or name=definition (no spaces). If the definition and the = are
# omitted =1 is assumed.
PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used.
# Use the PREDEFINED tag if you want to use a different macro definition.
EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
# doxygen's preprocessor will remove all function-like macros that are alone
# on a line, have an all uppercase name, and do not end with a semicolon. Such
# function macros are typically used for boiler-plate code, and will confuse
# the parser if not removed.
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
#---------------------------------------------------------------------------
# The TAGFILES option can be used to specify one or more tagfiles.
# Optionally an initial location of the external documentation
# can be added for each tagfile. The format of a tag file without
# this location is as follows:
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
# TAGFILES = file1=loc1 "file2 = loc2" ...
# where "loc1" and "loc2" can be relative or absolute paths or
# URLs. If a location is present for each tag, the installdox tool
# does not have to be run to correct the links.
# Note that each tag file must have a unique name
# (where the name does NOT include the path)
# If a tag file is not located in the directory in which doxygen
# is run, you must also specify the path to the tagfile here.
TAGFILES =
# When a file name is specified after GENERATE_TAGFILE, doxygen will create
# a tag file that is based on the input files it reads.
GENERATE_TAGFILE =
# If the ALLEXTERNALS tag is set to YES all external classes will be listed
# in the class index. If set to NO only the inherited external classes
# will be listed.
ALLEXTERNALS = NO
# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
# in the modules index. If set to NO, only the current project's groups will
# be listed.
EXTERNAL_GROUPS = YES
# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of `which perl').
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
# or super classes. Setting the tag to NO turns the diagrams off. Note that
# this option is superseded by the HAVE_DOT option below. This is only a
# fallback. It is recommended to install and use dot, since it yields more
# powerful graphs.
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
CLASS_DIAGRAMS = YES
# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see
# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.
MSCGEN_PATH =
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If set to YES, the inheritance and collaboration graphs will hide
# inheritance and usage relations if the target is undocumented
# or is not a class.
HIDE_UNDOC_RELATIONS = YES
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz, a graph visualization
# toolkit from AT&T and Lucent Bell Labs. The other options in this section
# have no effect if this option is set to NO (the default)
HAVE_DOT = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# By default doxygen will write a font called FreeSans.ttf to the output
# directory and reference it in all dot files that doxygen generates. This
# font does not include all possible unicode characters however, so when you need
# these (or just want a differently looking font) you can specify the font name
# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
# which can be done by putting it in a standard location or by setting the
# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
# containing the font.
DOT_FONTNAME = FreeSans
# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
# The default size is 10pt.
DOT_FONTSIZE = 10
# By default doxygen will tell dot to use the output directory to look for the
# FreeSans.ttf font (which doxygen will put there itself). If you specify a
# different font using DOT_FONTNAME you can set the path where dot
# can find it using this tag.
DOT_FONTPATH =
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect inheritance relations. Setting this tag to YES will force the
# the CLASS_DIAGRAMS tag to NO.
CLASS_GRAPH = YES
# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect implementation dependencies (inheritance, containment, and
# class references variables) of the class with other documented classes.
COLLABORATION_GRAPH = YES
# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for groups, showing the direct groups dependencies
GROUP_GRAPHS = YES
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# Language.
UML_LOOK = NO
# If set to YES, the inheritance and collaboration graphs will show the
# relations between templates and their instances.
TEMPLATE_RELATIONS = NO
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
# tags are set to YES then doxygen will generate a graph for each documented
# file showing the direct and indirect include dependencies of the file with
# other documented files.
INCLUDE_GRAPH = YES
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
# documented header file showing the documented files that directly or
# indirectly include this file.
INCLUDED_BY_GRAPH = YES
# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
# generate a call dependency graph for every global function or class method.
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command.
CALL_GRAPH = YES
# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
# doxygen will generate a caller dependency graph for every global function
# or class method. Note that enabling this option will significantly increase
# the time of a run. So in most cases it will be better to enable caller
# graphs for selected functions only using the \callergraph command.
CALLER_GRAPH = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
# will graphical hierarchy of all classes instead of a textual one.
GRAPHICAL_HIERARCHY = YES
# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
# then doxygen will show the dependencies a directory has on other directories
# in a graphical way. The dependency relations are determined by the #include
# relations between the files in the directories.
DIRECTORY_GRAPH = YES
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. Possible values are png, jpg, or gif
# If left blank png will be used.
DOT_IMAGE_FORMAT = png
# The tag DOT_PATH can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found on the path.
DOT_PATH =
# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the
# \dotfile command).
DOTFILE_DIRS =
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
# nodes that will be shown in the graph. If the number of nodes in a graph
# becomes larger than this value, doxygen will truncate the graph, which is
# visualized by representing a node as a red box. Note that doxygen if the
# number of direct children of the root node in a graph is already larger than
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
DOT_GRAPH_MAX_NODES = 50
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
# graphs generated by dot. A depth value of 3 means that only nodes reachable
# from the root by following a path via at most 3 edges will be shown. Nodes
# that lay further from the root node will be omitted. Note that setting this
# option to 1 or 2 may greatly reduce the computation time needed for large
# code bases. Also note that the size of a graph can be further restricted by
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
MAX_DOT_GRAPH_DEPTH = 0
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, because dot on Windows does not
# seem to support this out of the box. Warning: Depending on the platform used,
# enabling this option may lead to badly anti-aliased labels on the edges of
# a graph (i.e. they become hard to read).
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
DOT_TRANSPARENT = NO
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10)
# support this, this feature is disabled by default.
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
DOT_MULTI_TARGETS = YES
Import changeset Doxyfile: LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: arch/isa_parser.py: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/kgdb.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/Makefile: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: test/tracetest.cc: util/rundiff: util/tap/Makefile: util/tap/tap.cc: util/term/Makefile: util/term/term.c: RCS to BitKeeper sim/main.cc: Initial revision sim/main.cc: Added base SMT support to SS3 distribution sim/main.cc: Corrected statistics in sim-smt Added "cnt_*" statistics to sim-smt and sim-outorder Added execution tracing to sim-outorder sim/main.cc: Numerous minor fixes. Implemented Ideal and Random fetch policies. Numerous new statistics. sim/main.cc: A few minor bug fixes to collapsing RUU & "ideal" fetch policy. sim/main.cc: Snapshot of MICRO99 work in progress. Lots of SMT stuff, EIO fixes, etc. sim/main.cc: -> New fetch stage: - Fetch a block at a time - Execute in fetch -> Removed execute from ruu_dispatch() -> Cleaned up sim/main.cc: Added build time-stamp to top of simulation log sim/main.cc: Corrected error in priority rotation routine Added -max:mult option Modified makefile to use egcs compiler Added the -t option bkdwn.pl sim/main.cc: Added memory usage display Fixed #define for number of RS_LINKs sim/main.cc: Should be able to build other simulators (sim-fast, sim-eio, etc.) using "make -f Makefile.orig" (for Alpha at least, not quite for PISA). sim/main.cc: More SMT vs. non-SMT cleanup: 'make sim-X' now works for most X. sim/main.cc: Changed function of Fetch/Decode/Dispatch pipe: a) Fetch only if room in fetch queue b) Decode only if pipe advanced as a result of dispatching a packet c) Dispatch a packet only if: 1) Room for all insns in RUU 2) Room for all insns in LSQ 3) Room for all insns in INT Register File 4) Room for all insns in FP Register File Added ROB structure a) Instruction is placed in RUU & ROB at dispatch b) Instruction is removed from RUU at writeback (except stores) c) Instruction is removed from ROB at commit Added support for counting physical register usage (INT and FP) a) subtract from "free" count at dispatch b) add back when instruction is removed from ROB Added "my_index" field to RUU_station (simplifies reverse-lookups) Removed all remaining ptrace stuff RUU & LSQ now dump squashed instructions instead of marking them squashed - No cost! Reworked commit stage to use ROB instea sim/main.cc: - Added sc_dist1 stat type as a user-transparent special case of distribution with unit-size buckets: saves an unnecessary divide on every sample - Minor changes to compile as C++ code base/fast_alloc.cc: base/fast_alloc.hh: Major reorganization. Split sim-smt.c into multiple files, compile with C++, split ROB & RUU structures, numerous small formatting and performance changes. sim/eventq.cc: sim/eventq.hh: - Replaced SimpleScalar event queue code with smt_eventq.{cc,hh} - Eliminated unused cache:flush option - Initialize bpred history regs and BTB and RAS entries to provide repeatable results - Added reset_spec_state() function: cleans up interface to spec_state.c sim/eventq.cc: sim/eventq.hh: Major reorganization of memory-system code and interface. base/fast_alloc.cc: sim/eventq.cc: sim/eventq.hh: Moved C++ files to .cc/.hh, compile C files with C compiler. base/dbl_list.hh: Initial check-in: doubly-linked list template class. sim/eventq.hh: Added when_created and when_scheduled time-tags for debugging base/fast_alloc.hh: Plug memory leak sim/eventq.cc: Runahead_Prefetch memory-system support, including miss notification events in cache. sim/eventq.cc: sim/eventq.hh: Merged branch "mt-frontend" into trunk of CVS tree Changes include: Multi-threaded Fetch & Decode Correct functionality of branch misprediction fixup (MT only) Improved stats base/intmath.cc: base/intmath.h: Integer math functions. base/fast_alloc.cc: base/fast_alloc.hh: Remove carriage returns. base/intmath.h: Add Min/Max template functions sim/prog.cc: sim/prog.hh: Adding smt-safe and smt-fast. These are functional simulators based on sim-safe and sim-fast. Despite their names, they do not actually don't handle multithreaded programs yet. The runfile functionality was pulled out of sim-smt.cc into its own files. This allows all three simulators to use runfiles. NOTE: There is a lot of duplicated code in these three simulators that should probably be separated out. The macro type definitions in engin.hh are similar to the definitions in smt-safe.cc and smt-fast.cc sim/prog.cc: Add support for loading a kernel with simplescalar. Also add skeleton for loading a disk image to boot from with simplescalar. Hook for loading palcode is in place, but not implemented. Initial parameters passed to kernel at boot time are not passed properly. sim/prog.cc: Only support loading kernel/disk image if we're running FULL_SYSTEM sim/prog.cc: Make loading PAL a separate operation. Also separate kernel loading and disk loading so that it can only be done in FULL_SYSTEM. Finally, we need to also load the console image file. I'm not sure what's in there, maybe some stuff from SRM, but it's needed for proper execution. dev/alpha_console.cc: dev/alpha_console.hh: Console device implementation from simos. This is a simple device that supports the necessary console functions for booting. sim/prog.cc: sim/prog.hh: Separate the kernel loader and the program loader for simplicity since they don't share much code. arch/alpha/alpha_memory.hh: Add this somewhat gross hack to take care of the fact that alpha has the this load locking and conditional store mechanism. sim/prog.cc: Enable asids again. This makes multithreaded programs work again. I guess you could say that this was an accidental commit. Sorry sim/main.cc: Clean up Simplescalar copyright notice. sim/prog.cc: Allow '-' for stdout as well as stdin in run file. dev/alpha_console.cc: dev/alpha_console.hh: sim/prog.cc: arch/alpha/alpha_memory.hh: Replace the interface to the memory system. Basically this change goes away from the model of passing an address, and a number of bytes and getting/setting data. This change rather creates a memory_request packet (a simple struct) that bundles all of the necessary information together to pass into the memory system when making a request. This makes the function call syntax consistent even when you have virtual to physical translation and when you have strange flags like locked, or physical that you need to pass to your memory system. It has the added benefit of allowing the layers to pass data to each other, possibly skipping layers in between. This was necessary for the whacked out behavior that store conditional has on alpha. In addition, the entire memory system is now consistent in that it will return an alignment fault due to an unaligned access. This is necessary to properly model a full alpha system, but changes the behavior of bogus bad path loads and stores that access unaligned data. Because base/fast_alloc.cc: base/fast_alloc.hh: Major enhancement of FastAlloc debug code (uncomment #define in fast_alloc.hh to enable). Can now dump summary of in-use objects by type and address/type of oldest n objects (thank you RTTI!). Should be easier to identify memory leaks now. base/res_list.hh: file res_list.hh was initially added on branch segmented_iq. sim/sat_counter.hh: file sat_counter.hh was initially added on branch segmented_iq. sim/std_types.hh: file std_types.hh was initially added on branch segmented_iq. base/fast_alloc.hh: base/res_list.hh: sim/sat_counter.hh: sim/eventq.cc: sim/eventq.hh: sim/prog.cc: sim/std_types.hh: Merged branch "segmented_iq" -> Objectized the IQ and LSQ -> Implemented Standard, Sezned, and Segmented IQ's -> Major fixes to wrong-path execution (primarily involving data dependencies) base/res_list.hh: g++ is braindead, so I cannot pull template functions out into a .cc file. Instead, pull large functions out of the class definition and inline them. This leads to a much more readable class definition. In addition, since these functions are inlined, youseems to be what is intended anyway. sim/prog.cc: Move some variables to smt_prog so that targets other than sim-smt can use them. sim/main.cc: remove the dlite debugger (for smt at least) dev/alpha_console.cc: sim/eventq.cc: sim/main.cc: I knew I had done this for a reason Change 64 bit types back to long for alpha and replace all instances of stuff like %lld to use FMT64d and the like. The reason this is necessary is because TRU64 does not understand what %lld is and will print out "ld" instead of actually printing the number. So, PLEASE use the FMTxxx stuff instead of sticking %lld, %llx, %016llx and such into the code. sim/main.cc: Don't want FMT64d for things declared 'long': this doesn't work when FMT64d evaluates to "%lld". Just use "%ld" instead. dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: Add several initial devices for full alpha system simulation. Many of these devices are based on SimOS devices dev/alpha_console.cc: dev/alpha_console.hh: Update the alpha_console to take advantage of the simple disk interface sim/eventq.cc: sim/eventq.hh: Make it so you can service events that will happen in the future base/trace.cc: base/trace.hh: This is a simple tracing facility. The idea is that there is a bitvector where each bit represents something that you may want to trace. The end result is that you can at runtime turn on and off different tracing statements in the code so that you only see messages for things that you care about. This is only currently used in the devices framework, but I would like to see it eventually replace the debug, warn, and info functions. sim/intr_control.hh: Initial abstraction for a processor and interrupt controller arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Add full support for the SYSTEM_EV5 model in smt-safe. With this model, the user should be able to boot Tru64 unix. Several aspects of the memory subsystem were changed to accomidate this ability: - The C memory access functions no longer return an md_fault_type. - The prot_* functions no longer take a memrequest, and no longer return an md_fault type. They now take a single address and a size. This is because the prot_* functions don't need translation abilities, etc. - The prot_* functions will by default fail to work unless they are specifically implemented for the class that you want to use them with. - The unaligned parameter to the READ_* and WRITE_* function calls was added back so that exceptions that occur on STQ_U, LDQ_U, etc get the proper faulting address. - The memory controller now supports adding an arbitrary number of objects at arbitrary memory ranges so that a variety of devices can be accomidated. - The physical_memory class now not only emulates a specific amount of memor base/trace.cc: Check for existence of environment variable dev/console.cc: Temporary fix to get this to compile under Linux. sim/main.cc: Flush stdout before dumping stats. sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: Pull per-cpu variables into cpu_t object as first step toward multiprocessor support. Also encapsulated execution context into a single object. Program loading code also significantly reorganized. Syscall redirection to host machine temporarily broken (must use EIO files for now). arch/alpha/fake_syscall.cc: sim/eventq.cc: sim/exec_context.cc: sim/exetrace.cc: sim/main.cc: sim/prog.cc: Update source tree to deal with shuffling of files and renaming of files. Maybe a tiny bit of style here and there for kicks too. sim/prog.cc: Fix more stuff for reorg. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: base/dbl_list.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/intmath.cc: base/intmath.h: base/res_list.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/main.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/std_types.hh: Some style changes remove all of the $Log$ crap add $Id$ strings to the top of all files. arch/alpha/alpha_memory.cc: Convert memory request objects to have a bitvector of flags. sim/sat_counter.hh: Minor bug-fixes to statistics & options Saturating counter wasn't initializing properly arch/alpha/fake_syscall.cc: Compile on OpenBSD base/fast_alloc.cc: dev/console.cc: dev/disk_image.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.hh: sim/prog.cc: sim/sat_counter.hh: Move extern "C" statements out of C++ files and into the C headers with #ifdef __cplusplus guarding the extern. base/str.cc: base/str.hh: My lame old reference counting string class. It's really not too bad. base/intmath.cc: removed unused variable sim/main.cc: add option -inifile to load the config file base/inifile.cc: base/inifile.hh: sim/main.cc: rename configfile to inifile base/intmath.h: Functions to determine if a character is hex, dec, oct. Convert hex to int base/str.cc: base/str.hh: Add a tokenize function. Fix a bug in the CopyRight function Add a const iterator Add a string to number function that will deal with hex, decimal, octal, positive numbers and a few suffixes. Complete with bounds checking and syntax checking base/inifile.cc: base/inifile.hh: Cope with fix in CopyRight function from the String class. Add a find default which whill check for a Default= parameter. Add #include guards dev/alpha_console.cc: style. change assertion sim/sat_counter.hh: Added instruction-type identification methods to dyn_inst Continued work on the segmented IQ: - Stats - Seg0 load mechanisms - "short" dump function - free_slots_last_cycle model improvement Added stats to sat_counter sim/main.cc: Parse .ini file for options in main.cc. sim/main.cc: Reindent following style guide. sim/sat_counter.hh: Updates to the segmented IQ sim/hybrid_pred.hh: Initial check-in sim/predictor.hh: Initial check-in of predictor Mods to predictor stats sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Class heirarchy fixes sim/predictor.hh: sim/sat_counter.hh: Now the predictors actually work! sim/sat_counter.hh: Final fixes to the SaturatingCounterPred Corrections to the LRP and HMP sim/sat_counter.hh: Bug fixes and predictor mods to segmented IQ during ISCA-2002 work Dumping of queue contents is a little more flexible for debugging arch/alpha/fake_syscall.cc: sim/prog.cc: Updated fake syscall support (for most common syscalls) so we can once again run straight binaries (not just EIO files). sim/sat_counter.hh: Final updates (for now) to the Segmented IQ Cleaning up the fetch stage Speed improvements to the Saturating Counter Predictor Object sim/prog.cc: sim/prog.hh: Fix parameter bug in process_t::dup_fd (causing stdio fd's not to get remapped correctly). base/str.hh: Add forward decl of class ostream base/inifile.cc: base/inifile.hh: Rename members to conform to common style. base/inifile.cc: Oops... looks like CPP_PIPE doesn't work. sim/main.cc: sim/sat_counter.hh: sim/sim_object.cc: sim/sim_object.hh: New configuration scheme based on .ini files and hierarchical descriptions. Currently in a transitional state: only sim_smt CPU, IQ, Cache, Bus, and Mem objects are configured this way. Old mmodel.{hh,cc} completely gone. base/inifile.cc: Fix pipe directionality for Linux: CPP_PIPE works again. sim/sim_object.cc: Updates for INI-file parameters for Seznec and Segmented IQ models Fixed naming of IQ classes sim/sim_object.cc: sim/sim_object.hh: - Minor revisions to ParamContext, SimObjectBuilder, etc. to allow creation of SimObjects outside of configuration hierarchy. - Encapsulated magic boilerplate for object creation in macros to simplify usage and make future changes like this simpler. arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Rename process_t --> Process, eio_process_t -> EioProcess, live_process_t -> LiveProcess base/str.cc: base/str.hh: flesh out string class base/str.cc: This time commit the right file. base/str.cc: fix Tokenize for the case where the last string is only a single character sim/sim_object.cc: Instantiate Param<String>::showValue(). sim/sim_object.cc: sim/sim_object.hh: - Auto-register global parameter contexts for non-SimObject parameters - added ParamContext::parseAllContexts() - Finish and test enum params (SimpleEnumParam, MappedEnumParam) - Add vector-valued parameters: VectorParam<T>, SimObjectVectorParam, SimpleEnumVectorParam, MappedEnumVectorParam - Factor parsing & displaying functions to share code between scalar and vector parameter objects - Fix bug where a SimObjectClass constructor could be called before the static SimObjectClass::classMap constructor - Add "help" functions to dump parameter descriptions (ParamContext::describeAllContexts() and SimObjectClass::describeAllClasses()) sim/main.cc: Dump out config file parameters on '-h' cmd-line argument. sim/sim_object.cc: sim/sim_object.hh: - Add showType() method to display parameter type as string for help - Change EnumParam types to include specific enum type (avoids casting) sim/sim_object.hh: Minor updates for statistics, new compilers, etc. Moved some options into new options model base/inifile.cc: base/inifile.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/sim_object.cc: sim/sim_object.hh: Eliminated old SimpleScalar options package from sim_smt, shifting everything over to new parameter objects fed by .ini-style configuration files. Parameters can be set on command line using '--<sec>:<param>=<value>'. All other cmd-line options are assumed to be config file names, except '-h' prints help msg. Got rid of *_reg_options(), *_check_options(), *_uninit() calls. Moved more initialization into constructors; remaining code is now automagically executed by providing checkParams() and cleanup() methods on ParamContext-derived objects. (See exetrace.cc, for example.) Runfile is gone; processes are initialized as simulation objects. Split parameter code out of sim_object.{cc,hh} into param.{cc,hh}. Moved a bunch of CPU object methods from sim_smt.cc to cpu.cc. smt_reg_stats calls now need to know number of threads. Can be done by explicit argument to global function, or (for backward compatibility) calling CPU object method with same parameters as old global function. Renamed "SimControl" par base/circlebuf.cc: base/circlebuf.hh: Add a circular buffer class that holds string data. You can set the size of the buffer, and basically keep writing to it, and later read the last size bytes from the buffer. kinda like tail -f test/Makefile: test/bitvectest.cc: test/circletest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/strnumtest.cc: test/tokentest.cc: Add a little bit of test framework and a bunch of initial tests test/paramtest.cc: Move the param test thing to the new test framework, though it doesn't compile right now since I couldn't figure it out base/inifile.cc: Disable pipes for cpp: hangs if cpp output is bigger than kernel pipe buffer. sim/sim_object.cc: Check for accidental redefinition of SimObject class names. base/str.cc: Support exponents in StringToNumber. It should be noted, that while StringToNumber does bounds checking, the bounds checking has not been mathmatically proven, so it could have mistakes. base/range.hh: Simple range class that will parse a range and provides comparison operators base/trace.hh: New tracing options test/Makefile: test/rangetest.cc: add a new test for the Range class sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Create an ExecutionTrace class that encapsulates the old exe_trace stuff. Convert the last of the old options stuff to the new params and get rid of the old options files. Get rid of the old range files. arch/alpha/fake_syscall.cc: Stupid linuxisms sim/main.cc: sim/sim_object.cc: Output config info to cerr instead of cout. sim/main.cc: Load default.ini if the file exists test/Makefile: test/bitvectest.cc: test/circletest.cc: test/initest.cc: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/tokentest.cc: Add Id tags sim/sim_object.cc: Bug fix to allow use of "default=" in ini-files sim/prog.cc: Fix for wacky compiler bug base/inifile.cc: Modified some ROB statistic labels to make them more uniform Re-implimented rob-caps arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: Add support for doing virtual to physical translation using the in-memory page table base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: Basic support for remote debugging base/pollevent.cc: base/pollevent.hh: A class abstraction for poll base/socket.cc: base/socket.hh: Support for tcp server sockets base/symtab.cc: base/symtab.hh: simple symbol table loaded from a preprocessed file dev/alpha_access.h: dev/alpha_console.hh: split alpha access into a separate file so that building console code is simpler dev/disk_image.cc: dev/disk_image.hh: use a string for the disk image file name instead of a char * arch/alpha/alpha_memory.cc: Make the MCSR segment check more explicit rearrange base/trace.cc: Make trace stuff use new parameter stuff base/trace.hh: Fix DPRINTF and DPRINTFN macros Add a few new trace flags sim/exetrace.cc: sim/exetrace.hh: Add more features to the exetrace stuff. Make use of the symbol table support. base/remote_gdb.cc: fix DPRINTFs dev/alpha_console.cc: dev/console.cc: dev/console.hh: Change the console framework to use the new pollevent stuff. This adds support for a console that can be attached and detached at runtime via a tcp connection (telnet). There is also a circular buffer integrated into the console so that upon connection, any missed console text is output to the console. In the future, this should easily allow for multiple system consoles to be attached. base/inifile.cc: base/str.hh: Move the string hash function base/symtab.cc: base/symtab.hh: sim/exetrace.cc: Add support to lookup symbols by name, and take advantage of that support for looking up symbols for panic and badaddr base/str.cc: base/str.hh: change to new formatting. naming convention still dosn't match new style dev/console.cc: dev/console.hh: Fix console code so that typed characters are properly handled. When clearing interrupts, be explicit with regards to which ones. arch/alpha/vtophys.cc: a tad bit of error checking sim/exetrace.cc: sim/exetrace.hh: EXE-Trace extensions Disabled "good_mem" memory layer... this still needs to be properly removed base/kgdb.h: Add more kgdb commands base/trace.hh: Tracing for ISP sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/prog.cc: sim/prog.hh: Update to BTB functionality Fixed numerous statistics Fixed path of store instructions so that they _all_ go through issue stage Updates to exetrace functionality sim/eventq.cc: sim/eventq.hh: Replaced every-cycle termination checks in sim_main() with events. Added per-thread instruction-count-based event queues to handle termination based on committed instruction count. These are now specified via parameters to the FullCPU object (max_insts_any_thread and max_insts_all_threads) rather than global parameters under the [max] context. Also replaced break_cycle check with DebugBreakEvent. Some cleanup of eventq.{cc,hh}. sim/prog.hh: Don't die if included under FULL_SYSTEM: just skip contents. sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added SimpleCPU object to do sim_safe type simulation in sim_smt. Created abstract base class BaseCPU as common parent of (detailed) CPU and SimpleCPU. sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: Register Process object stats using SimObject reg_stats() method rather than indirectly via Thread end exec_context objects. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Changes to eliminate the global 'the_cpu' pointer to allow for mutliple CPUs/systems. Specifically: - Add findMaxThreadsPerCPU() and tickAll() static methods to BaseCPU class. - Added generic printExtraOutput() method for all SimObjects, to dump output at the end of simulation that is not covered by stats. Use this hook on CPU object to call dump_floss_reasons(). sim_aux_stats() is now obsolete. - printExtraOutput() takes an ostream& rather than a FILE*, so dump_floss_reasons() had to be converted to C++ I/O. - Fixed a bug in floss_reasons.cc where an additional mem_access_result_t item (MA_NOT_PREDICTED) did not have a corresponding entry in mem_access_result_item_descr. This resulted in "(null)" being printed with sprintf I/O (which no one had noticed, apparently), but caused a segfault using streams. sim/exec_context.hh: sim/main.cc: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/simple_cpu.cc: Rename many stats to include config hierarchy path, so results from different CPUs/systems can be distinguished. Move stats.c/h into C++... renamed to stats.cc/hh. Added overloads of most stat registration functions to allow 'string' rather than 'char *' stat names & formulas... no more sprintf needed! sim/base_cpu.cc: sim/base_cpu.hh: Add sim_num_insn stats as per-CPU and total number of simulated instructions so we can continue to calculate sim_inst_rate. sim/simple_cpu.cc: Fix sim_num_insn stat for SimpleCPU. sim/simple_cpu.cc: sim/simple_cpu.hh: Move global memory interface objects into SimpleCPU object. Made read/write functions SimpleCPU members for easier access to same. Can now do multiple systems in non-FULL_SYSTEM mode. sim/param.hh: sim/sim_object.cc: sim/sim_object.hh: SimObjects now look in the .ini database first using the object instance name (e.g., sys.cpu0) *then* using the configuration class name (e.g., DetailedCPU). This makes it easier to use a common description but override a few simple things like the workload. base/remote_gdb.cc: dev/console.cc: dev/disk_image.cc: Make ConsoleListener & GDBListener explicitly print which ports they're listening on. arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Cleanup of full-system global variables, primarily in simple_cpu.cc, to allow multi-system simulations. (Multiple systems not yet yested though.) Also changes to build sim_smt in full-system mode (though with only SimpleCPU and not the full timing CPU for now). Still to do: minimize changes in SimpleCPU code between full-system and application modes... way too many ifdefs there. Much of the full-system stuff moved into SimpleCPU should be put in a new System object to allow multiprocessor simulations. Converted last remaining modules from C to C++ (mostly in /old). Renamed all .c files to .cc and a few .h files to .hh. Renamed architecture-specific files in arch/$TARGET from $TARGET.{cc,hh,def} to machine.{cc,hh,def} to get rid of pointless intermediate files in object directory. Split exo-specific definitions out of machine.hh into machine_exo.h. Specifics: In machine.def, null resource descriptors must be FUClamd_NA (and not NA) to pass C++ type checking. Enhanced error checking/reporting in bas base/range.hh: Use the templated type for intermediate storage. Added "valid" flag and method to the user can determine if the range parse or assignment was successful. sim/eventq.cc: sim/eventq.hh: Modifications to properly count commited instructions... [no impacts] test/Makefile: test/offtest.cc: New test test/foo.ini: test/initest.cc: add Another piece to the test arch/alpha/ev5.hh: Properly do alternate mode arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: sim/simple_cpu.cc: arch/alpha/ev5.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: formatting arch/alpha/alpha_memory.cc: C style comment -> C++ style arch/alpha/alpha_memory.cc: more formatting arch/alpha/alpha_memory.cc: Add ALT_MODE support to the tlb lookup and make mode handling more sane test/Makefile: test/symtest.cc: Add a test for the symboltable base/symtab.cc: Avoid some temporary objects base/trace.cc: add a hexdump like dump function for dumping memory base/trace.hh: Add more trace flags Add DUMP which does a hexdump with semantics like DPRINTF flush standard out after a debugging print or dump dev/simple_disk.cc: Add some debugging dumps sim/param.cc: sim/param.hh: sim/sim_object.cc: Because of order of construction, call a function that will return a ParamList that will construct it as soon as it is needed dev/pcireg.h: sim/simple_cpu.cc: sim/simple_cpu.hh: Flesh out the pci configuration space support. Add configuration file support for vendor ID and device ID. Clean up debugging sim/simple_cpu.cc: sim/simple_cpu.hh: Don't execute pmap_scavenge_boot. rename console_panic_addr to panic_addr. change some warn()s to DPRINTF() base/pollevent.cc: base/pollevent.hh: Don't poll every cycle. Use SIGIO to kick a poll off. Make it possible to disable events sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Completely rework the exetrace stuff. Make a clas that holds all of the trace data for a particular cycle. Add a N entry trace log so that one can dump the last N cycles leading up to some sort of crash. When printing a branch instruction, print the target symbol if available instead of the address dev/console.cc: dev/console.hh: sim/simple_cpu.cc: Make console code deal with not being polled every cycle sim/simple_cpu.cc: Don't interrupt while in PAL base/remote_gdb.cc: base/remote_gdb.hh: constify some functions. fix some buffer handling. add some debugging help sim/param.cc: Initialize paramList to NULL sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Rework the execution trace stuff again. Merge the cycle log and the exetrace into one class. Stick the TraceData in the dyn_inst_t class. Put the read_foo and write_foo functions in the dyn_inst_t class. This gets rid of the memaccess namespace. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Don't worry about which thread to trace right now. Fix that later. Add better support for merged logging and tracing. Make sure that there is a place to put data when there is no log. Make tracing work for non-system. sim/exetrace.hh: tracing() method must not return true if not initialized sim/base_cpu.cc: sim/main.cc: Many fixes to statistics (especially distributions) Many renamed statistics (added CPU name to all except cache stuff) dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: style fixes: Make class names follow the ClassName style Indenting based on four spaces sim/param.cc: Added pipetracing (The trace output _should_ be compatible with the original Simplescalar output, making their visualization tools available to us and providing us with a more detailed debugging tool than exetrace) base/trace.hh: Separate disk and disk data add tlaser uart arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: Make this use C++ instead of void * voodoo base/symtab.cc: base/symtab.hh: sim/exetrace.cc: sim/exetrace.hh: constify sim/param.hh: SimObjects are always pointers. Make this clear, and add the -> operator sim/prog.hh: fix comment dev/pcireg.h: Don't depend on order of #includes sim/exetrace.cc: Make logging work without tracing arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Turn all of the devices and system stuff into SimObjects. Add many extra parameters to have config file flexibility base/sched_list.hh: file sched_list.hh was initially added on branch clustering. dev/console.cc: dev/disk_image.cc: Don't assume variables are initiaized to be zero sim/simple_cpu.cc: don't forget to dump the trace data if we're tracing arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: remove md_done_hwrei which was a hack that helped me make the trace output look like what I was able to get out of SimOS. Since we're more advanced than them, it's not needed sim/simple_cpu.cc: Try to make the trace more representative of what's going on. (Mainly around disruptions.) sim/simple_cpu.cc: Disable this code since it uses a hardcoded address. This may be more useful in the future though. sim/simple_cpu.cc: base/statistics.hh: oops base/trace.hh: style base/trace.hh: add tracing to interrupts sim/simple_cpu.cc: Removed old access call in CPUMemInterface and added MemREqs to the pipeline. sim/prog.cc: Give main memory a name to fix statistics. sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added basic infrastructure to do checkpointing. Simple test in SimpleCPU. base/trace.hh: Added support for checkpoint/serialization Added Serilize to list of know flags sim/param.cc: sim/serialize.hh: Added support for checkpoint/serialization Added Serilize to list of know flags Now add implicit SimObjects to the ConfigHierarchy so they can be unserialized. sim/serialize.hh: sim/simple_cpu.cc: Added WH64 implementation and dependencies Added WH64 implementation, and added the ability to do stores of more than 4 bytes, and sett loads to 8 bytes. base/inifile.hh: base/str.hh: Use functors for the hash functions for the hashtable class. Pulled up from the pisa branch with a few modifications. sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Updated to Hierarchical naming Infrastructure for checkpointing. base/inifile.cc: base/inifile.hh: base/trace.hh: sim/exec_context.hh: sim/exetrace.cc: sim/main.cc: sim/param.cc: sim/param.hh: sim/simple_cpu.cc: test/Makefile: - Merge PISA branch onto HEAD - Tag before merge: HEAD_PRE_BR_PISA_MERGE - Tag after merge: HEAD_POST_BR_PISA_MERGE - Similar tags on PISA branch - Add port to SimpleScalar/PISA - New PISA instructions: itouch spill reload map unmap - Add prefetch implementation - Prefetch cache - Cache buffer (victim/prefetch buffers) - Prefetch queue - itouch instruction - Add functional SLAT implementation sim/main.cc: Make this work in non Linux base/remote_gdb.cc: sim/base_cpu.hh: sim/simple_cpu.cc: Make FULL_SYSTEM work again after the pisa merge. Random cleanups. sim/main.cc: sim/memtest.cc: sim/memtest.hh: Removed rules to make SIM_MEMTEST, added memtest.cc to smt source list Renamed sim_memtest to memtest. Memtest now extends BaseCPU and can be dropped into sim_smt. Still need to add the ability to stop it running without a manual ctrl-C though. Memtest currently does not test copies, just reads and writes. The multiple MSHR/Cache changes broke copying along the way. Just touched main to help debug (needed to give a set random seed). Its back to normal. sim/main.cc: undo erik's mistaken commit arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/vtophys.cc: base/circlebuf.cc: base/circlebuf.hh: base/inifile.cc: base/inifile.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/remote_gdb.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/prog.cc: sim/prog.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/sim_object.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: test/bitvectest.cc: test/foo.ini: test/initest.cc: test/initest.ini: test/paramtest.cc: test/rangetest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: - Get rid of my String class, the Vector class, the bitvector class, and my doubly linked list class. - Convert tokenize, to_number (formerly StringToNumber) and eat_white to function on stl strings. - Change most cases of char * and const char * to string, or const string & - Some formatting and style nits, but not too many. sim/param.cc: test/bitvectest.cc: use resize, not reserve to change the size of the actual vector base/str.hh: fix to_lower dev/console.cc: better tracing sim/memtest.cc: sim/memtest.hh: Added support for CoherenceTest Fixed small error that was leading to a fixed address being used half of the time. sim/exetrace.cc: sim/exetrace.hh: Improvements to EXE-Trace: Displays thread number (optionally) Doesn't display 'count' field (optionally) 'Extended' output lines up nicely sim/memtest.cc: Fixed a print warning in memtest.cc sim/exetrace.hh: sim/main.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Merge SLAT changes - Add stats to prefetch cache to track cycles lost due to each miss address - Get simple_cpu and FULL_SYSTEM to compile again. I'm not sure these will run correctly (simple_cpu should) but it is an improvement over what's currently available. Split the engine files into generic, cpu-specific and isa-specific files to isolate the various parts of the engine code. This is quite hackish in places due to machine.def (e.g. see comments in execute.cc). Further cleanup is warranted but it compiles and passes smt-test. Later commits will remove unused code. base/trace.hh: sim/param.cc: sim/sim_object.cc: add a new DTRACE macro that tests a trace variable if tracing is on, or evaluates to fals if tracing is off. Avoids #if TRACING_ON/#endif add an option for wheter or not you want the parameter stuff dumped while the simulator is starting sim/exetrace.cc: sim/exetrace.hh: Make the execution trace print the way it did before steve's last change. Also, pass the flags in a more intelligent manner rather than adding new function parameters all over the place. sim/exetrace.hh: sim/simple_cpu.hh: make exetrace work in FULL_SYSTEM after dave's last changes. Exetrace could probably be improved more to remove most of the #ifdef FULL_SYSTEM junk. Not today though base/trace.hh: new trace flags dev/alpha_console.cc: size was too big dev/pcireg.h: new device ID for simos ethernet device dev/disk_image.cc: dev/simple_disk.cc: dev/simple_disk.hh: be smarter about using stl strings sim/pc_event.cc: sim/pc_event.hh: PC based event system sim/simple_cpu.cc: Make all existing pc based stuff use the new pc based events base/trace.cc: base/trace.hh: sim/param.cc: sim/sim_object.cc: If we're not tracing, print out the configuration junk. If we are tracing, the configuration printing is default sim/exetrace.cc: - Fix bogus references to omitCount and includeTnum. base/kgdb.h: base/remote_gdb.cc: base/remote_gdb.hh: TONS of improvements to remote kernel debugging. - Use the pc based events stuff to simulate hardware breakpoints. - Implement the set/clear breakpoint/watchpoint function, though only breakpoints are implemented right now. Both software and hardware breakpoints are implemented as hardware breakpoints. - Fix numerous bugs in single stepping, and make temporary breakpoints use hardware breakpoints instead of software breakpoints. - Add tons of debugging stuff to help with future remote debugger debugging. (No, that was not an accidental doubling.) - Implement part of the query variable function. - Remove old cruft that we don't need. - Improve comments dev/disk_image.cc: dev/disk_image.hh: Copy on write disk support This code uses a hash table to implement copy on write support to disk image blocks. There is also support to write out the table and load it back in. dev/simple_disk.cc: This class uses std::string sim/simple_cpu.hh: don't need these base/circlebuf.cc: base/circlebuf.hh: Add some size information so we can keep track of wheter or not the buffer is empty arch/alpha/vtophys.cc: simplify base/object_file.cc: base/object_file.hh: initial framework for sucking in an object file and figuring out some stuff for it. Support for ecoff and a header for elf. There is nothing for relocations, but the symbol information is available so an external program is no longer required for that. base/symtab.cc: base/symtab.hh: Update some of the symbol table stuff to add support for manual insertion of symbols. This is used by the object file code so that we can read the table from the object file and stick it into the more efficient symtab test/Makefile: test/nmtest.cc: test program for using the symbol table code. Basically allows one to look up a symbol in an object file dev/console.cc: dev/console.hh: Clean up the console code, add an input buffer queue to avoid leaving data in the socket buffer. This allows us to preprocess data as it comes in for things such as telnet support. There is some minimal telnet support in here but it isn't working very well, and isn't enabled by default sim/simple_cpu.cc: sim/simple_cpu.hh: Make the various pc based events part of the CPU object instead of being global sim/simple_cpu.cc: sim/simple_cpu.hh: Do the badaddr stuff far more intelligently. Basically, what we do now is first determine if the address goes to any proper device. If not, the address is bad. If so, ask the device whether the address is any good or not. The default case is that a device will say that all of its addresses are good, but there are some devices that don't follow this paradigm. dev/alpha_console.cc: dev/alpha_console.hh: sim/intr_control.cc: sim/intr_control.hh: sim/universe.cc: Make the tick frequency a global parameter and have all devices work from that Also, make the timer interrupt delay parameterizeable (and make the default shorter). This should make boot happen a little faster base/refcnt.hh: Simple reference counting class. Could be replaced by boost shared_ptr some day. Classes that are reference counted must have exported functions incref() and decref() for manipulating the reference count. This doesn't have the convenience of shared_ptr where the shared classes can be used unmodified, but it also means that the refcnt pointer (the pointer in this code) is the size of a normal pointer for this system. dev/etherbus.cc: dev/etherbus.hh: dev/etherpkt.hh: Initial hack at a ethernet device model and an ethernet bus model. Known to be broken at this point arch/alpha/alpha_memory.cc: sim/simple_cpu.cc: Memory system enhancements: - Functional implementation of load-locked/store-conditional in main_memory object (the functional memory object for non-full-system mode). This code should eventually be extracted out and applied to both main_memory and physical_memory so that it works in full-system mode as well. Moved lock_flag & lock_addr from system registers to control registers so they're available in non-full-system mode. - Moved Alpha unaligned access handling back into machine.def. (It was a flag on the mem request and handled in the memory system, but that approach appears to be unnecessarily complicated.) - Cleanup of AlphaMemoryRequest: down from five constructors to one; Erik's full-word flags are now bits in Nate's flag word. - Eliminate obsolete memory.h functions, and some unused memory_object functions. arch/alpha/vtophys.cc: base/remote_gdb.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Renamed SimpleCPU::(read|write)_(byte|half|word|qword) to just read & write, overloaded on the type of the 'data' argument. Merged the full-system and non-full-system implementations of these eight original functions into two common template functions. To support this, also renamed (read|write)[1248] on memory_object and derivatives to just read & write, again overloaded on the type of the 'data' argument. Many of these functions could now be condensed into a few template functions (though with a level of indirection so that the interface can remain virtual). I did not do that though. sim/exec_context.hh: sim/pc_event.hh: - Eliminate static SLAT variables when building FULL_SYSTEM base/remote_gdb.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: make it easier to drop into the remote debugger from within the local debugger dev/pcireg.h: Instead of having each pci device define its own sim object to represent the configuration space, just define one TlaserPciDev type and change the configuration regs as needed. base/range.hh: Fix bugs in range parsing code. sim/eventq.hh: Uncomment inlined event check (not sure why it was commented out to begin with). base/str.hh: - Add some missing #includes. - Remove some prefetching stats to shorten log lengths. - Fix perfect cache to work with new coherence mechanism (or at least not fail when there is no coherence protocol). base/range.hh: Consider whether a range object is valid or not when doing range tests. Reorganization & minor documentation of range comparison code. sim/exetrace.hh: Bug fix related to previous commit on range.hh. test/nmtest.cc: Add ability to do lookups by address dev/etherbus.cc: base/statistics.cc: fix sim/simple_cpu.cc: make it so we can change the boot flag sim/simple_cpu.cc: Bit more debugging info base/circlebuf.cc: Must initialize the size dev/console.cc: sim/simple_cpu.cc: better debugging base/remote_gdb.cc: Don't panic if the execution context isn't the same, just don't execute the breakpoint since it probably belongs to another instance sim/memtest.cc: Removed bcopy_in & bcopy_out (needless aliases for prot_write & prot_read, respectively). Made prot_read & prot_write public methods (not protected). Had to change some char arrays to byte_t to keep compiler happy. Renamed strcpy_in and strcpy_out to writeString and readString, respectively, to reduce confusion about the direction they operate. Also some reformatting for style. sim/main.cc: Move some more old simplescalar I/O from stdio to C++ streams. Some reformatting for style in main.cc as well. base/inifile.cc: base/inifile.hh: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. Some reformatting for style as well. sim/main.cc: Pass -D, -U, and -I args to cpp for ini-file processing. Should make use of #defines in .ini files much handier, once we get our parser up to dealing with the resulting whitespace issues. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: Changes to exetrace code to make it somewhat less schizophrenic so that it works under non-full-system SimpleCPU. (Previous code assumed either full-system+simple CPU or non-full-system+detailed CPU.) Also removed a lot of unused code in simple_cpu.cc. base/trace.hh: Added trace flags to display all syscalls or common syscall-related warnings (which are suppressed by default). arch/alpha/fake_syscall.cc: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: Syscall emulation (non-full-system) support for multithreaded apps compiled using Tru64 5.1's pthreads library. More specifically, you can now associate multiple processors with a single LiveProcess object (via their workload parameters). Only one processor will be active initially. The additional processors will be assigned to handle new "virtual processor" threads as they are created by the pthreads user library. Functionality is limited, as we do *not* emulate any kernel scheduling: once a VP thread is created, it is permanently bound to a simulated CPU. However, most of the SPLASH-2 benchmarks seem to run on both uni- and dual-processor targets. Includes total rewrite of syscall emulation (fake_syscall.cc). Only syscalls that have been needed thus far have been re-implemented in the new framework. Others will be moved over on demand. base/trace.cc: Better dump function sim/simple_cpu.cc: The active field of exe_ctx is not used in FULL_SYSTEM sim/eventq.cc: dev/etherbus.cc: more debugging sim/memtest.cc: Added support for mem_cmd.cc Transitioned from enum mem_cmd to class MemCmd sim/eventq.hh: sim/param.hh: sim/serialize.hh: sim/sim_object.hh: test/sized_test.cc: - Fix PISA syscalls to use new memory interface. - Make prefetching a real SimObject and port existing prefetchers to the new framework. base/inet.cc: base/inet.hh: Move functions for networking into a separate file sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Add basic support for a quiesce instruction. - Suspend the current thread on quiesce - Resume on interrupt Add an arm instruction that doesn't do anything yet sim/simple_cpu.cc: Added FULL_SYSTEM wrapper to use of "proc" in tick(). Nate, please check to make sure I didn't break it. base/inifile.hh: Added include of vector base/trace.hh: - Create a ScsiDevice base class that represents all of the functions that a SCSI device might want to implement - Clean up the ScsiDisk class: remove unneeded junk and give better names - Create a ScsiNone class that is used when a given target has no device sim/main.cc: Always use the same random seed to make the memory tester repeatable. As the comment says, someday we should make this a parameter. (Do we still need "mysrand()" and "myrand()"?) sim/memtest.cc: sim/memtest.hh: - Get rid of CoherenceTest... MemTest is just as capable. - Lots of new parameters for MemTest. sim/pc_event.cc: Don't execute a pc event twice dev/disk_image.cc: Add a config node of the copy on write disk image base/trace.hh: dev/disk_image.cc: More debugging base/trace.hh: Major update in dma code. - Separate the io callback into a read callback and a write callback - Fix the write callback so that the proper data is written back to the disk and data is copied to the proper place in the data buffer - Use sim_freq for the tick frequency. (There is still no delay) - Remove a bunch of unnecessary code - Make code more concise and remove old cruft - More Debugging (of course) - Formatting fixes - mprotect hack to make sure that dma buffer is not overwritten sim/exec_context.cc: sim/exec_context.hh: Fix broken assertion in main_memory::checkLockedAddrList(). Check for lots of failed store-conditionals and print deadlock warning message. arch/alpha/fake_syscall.cc: Use actual number of CPUs allocated to process (not const 2!). A few additional syscalls for pthreads support (not quite there yet though). sim/prog.cc: sim/prog.hh: Use actual number of CPUs allocated to process (not const 2!). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: base/remote_gdb.cc: base/remote_gdb.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: exec_context_t -> ExecContext spec_exec_context_t -> SpecExecContext dev/disk_image.cc: quell warnings base/trace.hh: remove more warnings sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: remove the Process object from FULL_SYSTEM since it doesn't really make any sense sim/simple_cpu.cc: move SIM_OBJECT junk to the end like other files sim/simple_cpu.cc: sim/simple_cpu.hh: Make it so we can use a memory hierarchy in FULL_SYSTEM SimpleCPU arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: - Add pointer from execution context to the CPU it's running on. - Just pass execution context pointer to the syscall emulation code, instead of a bunch of individual field arguments. - A few more exec_context_t -> ExecContext changes for non-full-system. - Rudimentary thread scheduling for non-full-system support of pthreads apps. Hopefully this won't go much farther. sim/exec_context.cc: Oops... fix minor bug from merge. arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: - We really don't want to build a thread scheduler in the simulator... rip all that out, and replace with some basic synchronization primitives implemented as syscalls. Non-full-system MP apps thus need to be compiled specially to use these primitives, but it's plenty good enough to get SPLASH-2 up and running. These primitives block by suspending the execution context (for efficient simulation). Studies that care about synch operation costs should use user-level LL/SC-based primitives instead. - Implement more than two states (active vs. !active) for an ExecContext. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: base/circlebuf.cc: base/fast_alloc.cc: base/inifile.cc: base/inifile.hh: base/object_file.cc: base/object_file.hh: base/range.hh: base/remote_gdb.cc: base/res_list.hh: base/socket.cc: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/eventq.cc: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: First pass at compiling with gcc 3.x. Lots of "std::" in header files, "using namespace std" in source files. (Note policy of not putting "using" statements in headers or before includes in sources.) Still not able to compile with gcc 3.2. Errors: - Can't create an ifstream from a file descriptor anymore (breaks IniFile). - "`class MSHR::MSHRegister' is private" errors in mshr.cc and prefetch_cache.cc: not clear why since it's in the public part of the class declaration. - cpu.cc:879: can't match a reference and 0 (specifically "no match for `bool ? SimObjectParam<PipeTrace*>& : int' operator") - pipetrace.cc: "invalid conversion from `int' to `std::_Ios_Fmtflags'" Warnings: - strstream now deprecated... needs some rewriting in sat_counter.hh and hybrid_pred.hh (need to get all that code out of the headers anyway) - trace.hh macro problem: cpp now says 'pasting "::" and "Event" does not give a valid preprocessing token' - major "implicit typename" issues in base/sized.hh base/trace.hh: Token pasting not necessary. Quiets g++ 3.2 warning base/inifile.cc: base/inifile.hh: Make this compile in g++ 3.2 base/remote_gdb.hh: dev/etherbus.hh: dev/pcireg.h: dev/simple_disk.cc: Make this stuff g++ 3.2 happy base/inifile.cc: Make this still compile in g++ 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/serialize.hh: sim/simple_cpu.cc: Added serialization for simple FULL_SYSTEM objects. Working on the hard ones sim/simple_cpu.cc: Make this code actually compile. Fix style while we're at it sim/base_cpu.cc: Fixes to recent updates to maintain gcc 3.2 compatibility (mostly more std:: in header files). test/Makefile: SS -> M5 base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: printf replacement that uses C++ io streams and is typesafe Any type that overloads operator<< for use with streams will work with this structure. The format string is backwards compatible with printf style format strings, but the types are not checked, for example, %s doesn't verify that the type being printed is a string, %d doesn't verify that the type being printed is an integer. Instead, the various formats just set up the proper io stream manipulators for printing. So, %#s doesn't mean anything different from %s, but %#x does mean something different from %x. If the type you are printing does't care about the #, then nothing changes. base/cprintf.hh: test/cprintftest.cc: Fix case where there is only a format string, and no arguments base/cprintf.hh: base/cprintf_formats.hh: std:: base/trace.cc: base/trace.hh: Make the tracing stuff use cprintf base/cprintf.cc: Save and restore iostream state dev/etherbus.cc: Rewrite the dma engine support so that it can interact with the dma_interface to the timing memory model. This way, all of the timing of the dma transfers themselves can come from the memory system. Simos copyright removed since this code shares nothing with Simos sim/hybrid_pred.hh: sim/predictor.hh: sim/sat_counter.hh: Fixes to stat names in segmented IQ Changes from strstream to stringstream to remove warnings dev/etherbus.cc: dev/etherbus.hh: dev/etherint.hh: Separate the interface to the bus from the device sim/simple_cpu.cc: Move progress message from SimpleCPU::tick() to new ProgressEvent. (Much more efficient, and available independent of CPU model.) dev/console.cc: dev/console.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). sim/eventq.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Added [DoEvents] default so command line --DoEvents:do_events=1 turns on events for all busses Added serlization function headers (not implemented yet). Added EventQueue::nextEventTime(), returns time head is scheduled, or sim_cycle if empty. Added support for uniprocessor SimpleCPU with timing memory. arch/alpha/fake_syscall.cc: base/remote_gdb.cc: sim/exec_context.hh: sim/prog.cc: sim/simple_cpu.cc: Get rid of redundant ExecContext PC field. sim/main.cc: Add -n option to suppress loading default.ini. Added a little more help to the help message. sim/main.cc: Oops... make sure we still load it when we don't say '-n'. sim/main.cc: Minor formatting. sim/exetrace.cc: sim/exetrace.hh: Merge full-system & non-full-system exetrace code. base/cprintf.cc: base/cprintf.hh: Previous two commits were (somewhat) broken... this is the real one test/cprintftest.cc: more testing base/remote_gdb.cc: base/remote_gdb.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Moved a lot of full-system variables out of SimpleCPU so that they can (eventually) be used with the detailed CPU model. Several fields moved into the ExecContext, while a few others moved into a new System object (which replaces the old Kernel object, for now at least). sim/exetrace.cc: sim/pc_event.cc: sim/pc_event.hh: sim/simple_cpu.cc: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: dev/alpha_console.cc: dev/alpha_console.hh: - Many g++ 3.2 fixes - Added Makefile magic to allow a comprehensive build of all simulator variants on all archtectures. 'make all' or 'make TARGET=<arch> all_flavors' - Added container adaptors and associative_table. Don't use these quite yet -- they are very expensive to compile. Am currently converting them over to boost::mpl. They are used by the new BHGP prefetcher. - Moved md_sysreg_t reg_t entries to isa_traits. PISA does not have these sorts of registers. - Moved ipr accesses to theISAEngineTraits because they are not generally applicable. These are #ifdef FULL_SYSTEM in the simulator code -- eventually this should get worked into the traits structure. base/fifo_buffer.cc: base/fifo_buffer.hh: Initial add of this incredibly usefull utility object arch/alpha/ev5.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Implement some interval statistics for full system mode. Create a callpal function that is called when a callpal occurs so it's easier to manipulate the statics. Rework the vtophys stuff to make it a bit cleaner. arch/alpha/ev5.cc: arch/alpha/ev5.hh: Keep track of all callpals in the interval stats base/res_list.hh: base/sched_list.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/predictor.hh: sim/prog.cc: sim/sat_counter.hh: TA DA!!!! The giant, huge, amazing, i-hope-i-never-have-to-do-that-again, CLUSTERING MERGE!!!! \ base/fifo_buffer.hh: sim/exetrace.hh: Minor adjustments for GCC 3 compatibility Turn ptrace features back on arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/remote_gdb.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: Get rid of almost all old-style object names. This commit is equivalent to running the following script on the current head: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' \) -exec perl -pi -e '\ s/\bmemory_object\b(?!\.hh)/FunctionalMemory/g;\ s/\bvirtual_memory\b(?!\.hh)/VirtualMemory/g;\ s/\bmain_memory\b(?!\.hh)/MainMemory/g;\ s/\bphysical_memory\b(?!\.hh)/PhysicalMemory/g;\ s/\bspec_memory\b(?!\.hh)/SpeculativeMemory/g;\ s/\bMemObj\b(?!\.hh)/TimingMemObj/g;\ s/\bmemory_translation\b(?!\.hh)/AddressTranslator/g;\ s/\balpha_tlb\b(?!\.hh)/AlphaTlb/g;\ s/\balpha_itb\b(?!\.hh)/AlphaItb/g;\ s/\balpha_dtb\b(?!\.hh)/AlphaDtb/g;\ s/\bmemory_controller\b(?!\.hh)/MemoryController/g;\ s/\bstorebuffer_t\b(?!\.hh)/StoreBuffer/g;\ s/\bstorebuffer_entry_t\b(?!\.hh)/StoreBufferEntry/g;\ s/\bcreate_vector_t\b(?!\.hh)/CreateVector/g;\ s/\bcv_spec_state\b(?!\.hh)/CreateVecSpecState/g;\ s/\bspec_state_list\b(?!\.hh)/SpecStateList/g;\ s/\bdyn_inst_t\b(?!\.hh)/DynInst/g;' {} \; arch/alpha/fake_syscall.cc: sim/exec_context.hh: sim/memtest.hh: sim/simple_cpu.cc: Renamed files to better match new object names: base_memory.{cc,hh} --> functional_memory.{cc,hh} mem_obj.{cc,hh} --> timing_mem_obj.{cc,hh} sim/exec_context.cc: sim/exec_context.hh: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Detailed CPU now compiles in full-system mode (but doesn't run, so I didn't add it to the makefile). SLAT code is now protected by '#ifdef USE_SLAT', since it's not currently compatible with full-system mode. Also, slat.cc is not compiled by default. We will need a makefile option to do '-DUSE_SLAT' and add slat.cc to the source list. CPU::Thread object is gone; these are now just bare SpecExecContexts. Changed all remaining {read,write}_{byte,half,word,qword} sets of methods to just read/write template methods, where possible. sim/system.cc: sim/system.hh: Make the system boot flag a paramter arch/alpha/ev5.hh: sim/intr_control.hh: The ethernet device was interrupting on the wrong interrupt line. Line 0x17 is too high (it's higher than the clock interrupt) and it doesn't correspond with the spl protection in the driver source. To solve this, we hack in support to support multiple interrupts at a single level and have scsi and ethernet share the same interrupt level. dev/etherbus.cc: dev/etherint.hh: Make the bus call back to the ethernet interface when the transfer is complete. This allows the interface to do the next request in the transmit buffer if there is one. dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: Add etherdump object which accepts packets and spits them out in tcpdump format for analysis with tcpdump and ethereal. Make the etherbus support the dump object dev/etherint.cc: make the ethernet interface a SimObject that you can refer to dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Add a different connection type between ethernet interfaces. The ether link is a unidirectional fixed bandwidth link. To simulate a full duplex 100MB/s ethernet, you need two etherlinks. It's just much easier to simulate a full duplex link this way. Maybe encapsulate this into another bidirectional link sometime. sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/system.cc: Add a halted state to the simulator and only actually exit the simulator when all systems have halted. While we're at it, remove an if statement from the common code path in SimpleCPU::tick sim/exec_context.hh: sim/simple_cpu.cc: IntervalStatsObject -> IntervalStats test/Makefile: Make this work again base/cprintf.hh: #include guard arch/alpha/alpha_memory.cc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/simple_disk.cc: sim/eventq.cc: sim/pc_event.cc: sim/simple_cpu.cc: since cprintf properly deals with 64-bit types, stop using FMT* as much as possible base/circlebuf.cc: base/inet.cc: base/inet.hh: base/object_file.cc: base/res_list.hh: convert some stdio stuff to use cprintf/c++ streams dev/console.cc: dev/console.hh: convert some stdio stuff to use cprintf/c++ streams better use of format strings sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: - Make SLAT work with new execution context - Temporarily fix include file problems (circular includes) arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: sim/eventq.hh: sim/hybrid_pred.hh: sim/main.cc: True and false are keywords in C++, don't use TRUE and FALSE This can be done with the following script: #!/bin/sh for each in `find . \( -name '*.cc' -o -name '*.hh' \)`; do perl -pi -e '\ s/\bFALSE\b/false/g;\ s/\bTRUE\b/true/g;' $each done base/cprintf.cc: base/cprintf.hh: test/Makefile: test/cprintftest.cc: Add support for 'terminators' to cprintf. This is esentially a special manipulator that can cause some sort of event to occur when the stream is outputted. (Will be used for panic, fatal, etc.) base/cprintf.cc: base/cprintf.hh: Another cleanup fo the cprintf stuff. This should make it much easier to do panic, etc. sim/simple_cpu.cc: Rename sim_num_refs to SIM:num_refs to match Steve's new naming in the detailed CPU stats. base/cprintf.cc: base/cprintf.hh: Get rid of the reference counting and the pass by value, and come up with a way to remove all of the temporary variables that are created, and only create one. Should make the compiler's burden much less sim/pc_event.hh: quell warning arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/inet.cc: base/inet.hh: base/object_file.cc: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherpkt.hh: dev/simple_disk.cc: dev/simple_disk.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/serialize.cc: sim/serialize.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: Change byte_t etc. to C99 standard int8_t etc. Other than old/host.h, all other changes were produced by this script: #! /bin/sh find \( -name '*.cc' -o -name '*.hh' -o -name '*.c' -o -name '*.h' -o -name 'machine.def' \) -exec perl -pi -e '\ s/\bbyte_t\b(?!\.hh)/uint8_t/g;\ s/\bsbyte_t\b(?!\.hh)/int8_t/g;\ s/\bhalf_t\b(?!\.hh)/uint16_t/g;\ s/\bshalf_t\b(?!\.hh)/int16_t/g;\ s/\bword_t\b(?!\.hh)/uint32_t/g;\ s/\bsword_t\b(?!\.hh)/int32_t/g;\ s/\bqword_t\b(?!\.hh)/uint64_t/g;\ s/\bsqword_t\b(?!\.hh)/int64_t/g;\ s/\bbool_t\b(?!\.hh)/bool/g;\ s/\bdfloat_t\b(?!\.hh)/double/g;\ s/\bsfloat_t\b(?!\.hh)/float/g;' {} \; sim/simple_cpu.cc: Assume preprocessor can do ANSI '##' token pasting. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/sched_list.hh: base/socket.cc: base/symtab.cc: dev/console.cc: dev/disk_image.cc: dev/simple_disk.cc: sim/base_cpu.cc: sim/eventq.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/param.cc: sim/serialize.cc: sim/sim_object.cc: sim/simple_cpu.cc: Get closer to removing all FMT64 junk and myfprintf stuff Make panic, flatal, warn use cprintf. Start moving away from the old/misc.(cc|h) files. dev/simple_disk.cc: Get rid of some FMT junk dev/etherdump.cc: dev/pcireg.h: u_int* -> uint* dev/etherdump.cc: sys/time.h instead of time.h arch/alpha/ev5.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Do some clean up in the manner that the interval stats object is created Also, use the interval stats range when doing my full-system istats. Finally, don't make the interval stats part of the exec_context since it makes little sense to do so. We're only going to have one interval stats object (at least for now.) base/mod_num.hh: Initial addition of a "modulo-number" class sim/eventq.cc: sim/eventq.hh: convert some stdio to iostream sim/eventq.cc: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: Move some common events into a new sim_events file. Rearrange some other things to move towards having only events in the main loop. sim/eventq.hh: Change protections base/pollevent.cc: base/pollevent.hh: proper destruction dev/console.cc: don't panic on connection error. detach. sim/eventq.cc: sim/eventq.hh: Clean up event queue and add support for priorities sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: Get rid of sim_exit_now and make it an event. Get rid of sim_dump_stats and make it an event. Main loop is now reduced to servicing the event queue, ticking the CPUs, and incrementing sim_cycle sim/simple_cpu.hh: formatting nits base/cprintf.hh: dev/etherdump.cc: dev/etherdump.hh: sim/eventq.hh: sim/sim_events.cc: - ANSI/ISO C++ fixes - Improve SLAT efficiency - Add build_test rule to compile across all archs and options. This builds one simulator from each combination including the optimized Alpha simulator to run smt-test. Please run this before committing. base/misc.cc: make warnings less verbose sim/eventq.hh: Generic function that will delay the calling of a member function until a specified cycle. Has problems if you use it with gcc 2.95, but 3.2 compiles it ok. dev/etherbus.cc: Better debugging dev/etherbus.cc: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: Rework the EtherInt class to represent a generic Ethernet interface. Any object that wishes to connect to another device and pass ethernet packets must export an ethernet interface. This makes it possible to connect any two objects that have ethernet interfaces. For example, one EtherDev can connect directly to another etherdev, or the two EtherDevs can each attach to one of the interfaces on an EtherLink to get a fixed bandwidth. dev/ethertap.cc: dev/ethertap.hh: util/tap/Makefile: util/tap/tap.cc: The ethertap device and ethertap utility allow a simulator to connect to a real physical ethernet. Currently, the tap utility only works on OpenBSD, but that should be easily fixed. dev/ethertap.cc: dev/ethertap.hh: better bounds checking base/cprintf.hh: change function names in cprintf base/trace.cc: base/trace.hh: Make DPRINTF work more like panic, fatal, warn, etc. Also make it possible to redirect trace output to a file instead of stdout. dev/etherlink.cc: dev/etherlink.hh: Make EtherLink::Link Serializeable arch/alpha/alpha_memory.cc: base/remote_gdb.cc: base/res_list.hh: base/trace.cc: base/trace.hh: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: sim/eventq.cc: sim/eventq.hh: sim/pc_event.cc: sim/serialize.cc: sim/simple_cpu.cc: rework DPRINTF to automatically print the cycle and get the name of the object from which it was called. Additionally, while we're at it change 0x%x -> %#x dev/disk_image.cc: sim/pc_event.cc: sim/serialize.cc: dont use c_str() if we don't have to base/trace.cc: Only delete the stream if we created it base/trace.cc: base/trace.hh: Expose ostream to which tracing statements are sent via DebugOut() dev/console.cc: carriage return not necessary arch/alpha/arguments.cc: arch/alpha/arguments.hh: Add support for accessing function arguments from a kernel function. The class behaves somewhat like a random access iterator so that the user can access any argument desired, but to get at the data, the user uses the casting operators to get at the data pointed to by the arguments sim/pc_event.cc: sim/pc_event.hh: inline sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: create a pc based event that traps kernel printfs for debugging statements arch/alpha/arguments.hh: rename to CopyData and use void * to avoid compiler problems sim/pc_event.cc: Make Kernel::Printf take AlphaArguments as a parameter so that a user may add initial arguments to another version of the kernel function and then pass an offset arguments class to the function for printing the data. Also, while we're at it, remove the printing of the cycle. That can be done by the caller. base/trace.hh: sim/pc_event.cc: sim/pc_event.hh: sim/system.cc: sim/system.hh: Separate the printf event from the debugging printf event. The kernel will call the debugging printf event m5printf. There is also a raw version m5printfr that indicates to the simulator that it shouldn't print any extra information in the context of this debuggin printf because it would screw up fromatting. sim/pc_event.cc: symmetry arch/alpha/arguments.cc: arch/alpha/arguments.hh: plug huge leak arch/alpha/arguments.hh: Add std:: to list arch/alpha/arguments.hh: make the execution context available dev/etherlink.cc: formatting, typeo, paranoia sim/system.cc: sim/system.hh: enable the mbuf dump code sim/pc_event.cc: sim/pc_event.hh: Add a pc event for the kernel mbuf dump function arch/alpha/fake_syscall.cc: sim/main.cc: I can see no good reason at all for doing setjmp/longjmp arch/alpha/arguments.cc: arch/alpha/arguments.hh: reference count the argument data so that the data doesn't disappear before we're done using it. sim/main.cc: move all signal stuff into main.cc sim/sim_events.cc: Move termination and progress event initialization to sim_events sim/debug.cc: sim/debug.hh: sim/main.cc: sim/pc_event.cc: sim/simple_cpu.cc: Move some of the debug break stuff to its own file Use SIGTRAP to initiate a break and set up the simulator to ignore the signal. This will make gdb automatically stop in these functions, but won't interfere with normal simulator workings. sim/sim_events.cc: Id string sim/sim_events.cc: make g++ 3 happy base/cprintf.cc: base/cprintf.hh: base/misc.cc: base/misc.hh: base/trace.cc: base/trace.hh: - Rename debug rule to dbg so it doesn't interfere with debug.cc. - Reorganize build_test so it generates dependencies correctly. - Remove HashTable from spec_memory and replace with SGI's hash_map extension. - Put cprintf/ArgList in namespace cp so it doesn't interfere with g++ 2.95 std::deque (comma operator gives problems -- this is a g++ 2.95 bug). - Fix FP register decode in dispatch. PISA registers > 31 were being counted as FP registers and using up all of the FP hpysical registers. The code in commit correctly identified FP registers so the bogus FP physical register usage was never cleared, locking up the machine. This is why the SLAT didn't work correctly. Added isa_traits::isFloatingPointRegister and ::isIntegerRegister to do this tracking in a machine-independent way. sim/sim_events.cc: simple way to dump stats on specified cycles sim/eventq.hh: Re-insert assignment of description string into event sim/eventq.cc: If event is the head in remove() return arch/alpha/fake_syscall.cc: Clustering changes.... - clusters can share data using the ClusterSharedInfo structure - Pulled the register info file from the segmented IQ --> dispatch stage (this info can be used by the dispatch stage and any IQ model) - Segmented IQ's share the chain-info-table now base/misc.hh: - Add m5_assert() macro to print the sim_cycle if the assert fails. - Add simple_trace, simple_trace_data and simple_trace_start parameters to generate a sim-safe-like trace for easy comparison with simplescalar results. Needed for PISA debugging. sim/sim_events.hh: remove extra space sim/main.cc: Fix dump() for floss-reasons Segfault can now dump core sim/simple_cpu.cc: sim/simple_cpu.hh: Get rid of obsolete call from misguided thread scheduling experiment. arch/alpha/ev5.cc: arch/alpha/ev5.hh: add new alpha instructions for starting and ending intervals dev/disk_image.cc: dev/disk_image.hh: Make the copy-on-write disk image use hash_map base/callback.hh: Generic callback class and callback queue for random use sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Move exit stuff into it's own file. Make an exit callback queue so that generic callbacks can be invoked upon simulator exit dev/disk_image.cc: give a mode that makes sense dev/disk_image.cc: dev/disk_image.hh: Rework the object implementation of the copy-on-write disk image. - Allow a child name and an initial table size to both be specified - Add a read only flag that determines if changes to the image are written back to disk. - If the flag is not read only, and there is no initial image to open, that's ok, just create an initial empty table. - If the table is to be written back to disk, schedule an ExitCallback to write the image back when the simulator exits. base/callback.hh: make this work in g++ 3 base/misc.cc: base/pollevent.cc: base/pollevent.hh: base/trace.hh: sim/pc_event.cc: sim/universe.cc: declare sim_cycle in one place arch/alpha/alpha_memory.cc: dev/alpha_console.cc: more sim_cycle cleanup sim/eventq.hh: fix priority handling in the event queue: if an event is scheduled with a priority once, then don't overwrite the priority if it is subsequently scheduled without a priority dev/console.cc: send a carriage return/newline pair to the output manually since cprintf and friends would interpret this and send out endl dev/console.cc: dev/console.hh: add option to save console output to a file sim/simple_cpu.cc: sim/simple_cpu.hh: Rework cache interface to avoid trying to loop inside of tick(). Should work much more cleanly with timing memory now (even for multiprocessor systems). sim/simple_cpu.cc: a whole bunch of cleanup foo sim/eventq.cc: events can't be scheduled in the past anymore sim/eventq.cc: sim/eventq.hh: create doEventLoop(), this continually cycles through the event queue consuming events until there are none left dev/console.hh: Make this work in g++ 3 sim/sim_events.cc: sim/sim_events.hh: Make the act of ticking all cpus an event. Automatically schedule it every cycle sim/debug.cc: sim/main.cc: sim/sim_events.cc: rearrange code to get rid of sim_smt.cc sim/main.cc: oops. bring back the SIM:cycle stat arch/alpha/ev5.cc: sim/simple_cpu.cc: move the break_ipl check to the point where the IPL is actually set sim/debug.cc: Make the debug break event first in any given cycle sim/simple_cpu.cc: sim/simple_cpu.hh: Split I-cache and D-cache stall cycles out from idle cycles in statistics. sim/prog.hh: - Replace SLAT maps with hash_maps - Add hash<> specializations for md_addr_t, counter_t, etc. - Increase max file descriptors from 15 to 100 (parser00 was running out) sim/simple_cpu.cc: A few baby steps toward full-system detailed CPU. ev5_trap() now sets both PC & NPC (not just NPC). base/misc.cc: base/trace.cc: New memory model Doxyfile: Configuration file for doxygen. Generates documentation in /n/zizzer/z/m5docs. To generate docs, run "doxygen Doxyfile" in the root directory of your copy of the head. To comment your code you use a javadoc like syntax, a cstyle comment with 2 stars at the front (/**). For example /** Everything before the first period is a brief description. This is a detailed description. @param <name> description of parameter to function @retval <name/type> description of function return value. @sa (for see also) generate links to other class/enum/member/etc. */ You should start your files out with a comment like: /** @file Brief description of the file. Detailed description if needed. */ See TimingMemobj.hh for more examples. dev/ethertap.cc: Make this work on OpenBSD sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: Make it possible to set an exit code for the exit event. Also, make exit_now not visible to the rest of the simulator so that people will know to create an exit event. Finally, don't include callback.hh since we don't have to. sim/sim_events.cc: use the SimExitEvent to make sure that we exit at the end of the cycle arch/alpha/fake_syscall.cc: don't use exit_now() create a SimExitEvent() arch/alpha/ev5.cc: arch/alpha/ev5.hh: Add an instruction that causes M5 to exit, allowing processes running under simulation to cause the simulation to terminate sim/simple_cpu.cc: in full system mode, don't panic on an unknown opcode dev/disk_image.cc: dev/disk_image.hh: convert stdio to streams sim/system.cc: remove uneeded include base/cprintf.cc: %p is an integer (more or less) sim/system.cc: sim/serialize.cc: missing include dev/disk_image.cc: cast to correct types for proper interface usage base/circlebuf.cc: base/intmath.h: base/remote_gdb.cc: base/res_list.hh: In c++, we use std::min, std::max, true, and false, not ano of the other junk sim/sim_events.cc: make a local copy of the data since the object can get deleted dev/alpha_console.cc: dev/alpha_console.hh: Added parameter for number of CPUs to console, defualt=1 sim/sim_events.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: use cprintf. general cleanup remove unneeded c_str() calls. base/cprintf.cc: make %% work base/cprintf.cc: handle %% better test/cprintftest.cc: better testing arch/alpha/alpha_memory.cc: convert to use iostream and cprintf instead of stdio and fprintf base/cprintf.cc: more accurately implement formatting for floating point numbers test/cprintftest.cc: more tests base/inifile.cc: base/inifile.hh: base/symtab.cc: base/symtab.hh: dev/disk_image.hh: sim/base_cpu.cc: test/Makefile: convert everything to use hash_map instead of my old hash table junk base/hashmap.hh: base/inifile.hh: dev/disk_image.hh: since people don't agree on where hash_map belongs, pull it into the m5 namespace and include hashmap.hh whenever a hashtable is needed sim/memtest.cc: Move Cache only calls (block_size, hit_latency, etc.) out of TimingMemObject and into CPUMemInterface. Changes to everywhere they were called on a TimingMemObj. sim/param.hh: Fix handling of operator[] for EnumVectorParam classes. Also fix some line wrapping problems caused by adding 'std::'. base/trace.cc: base/trace.hh: Extend trace facility to either print immediately to an ostream or maintain a circular buffer of trace entries (dumpable from debugger by calling dumpTrace()). Also change flags to use SimpleEnumVectorParam so we can just give a list of names instead of a big hex value. sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Integrate execution trace code into new trace facility. Eliminates the need for a separate execution trace log. Enable instruction tracing using --trace:flags=InstExec. base/misc.cc: Dump trace buffer in panic(). arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/simple_cpu.cc: set up an annotations.hh file where inline annotation functions that do nothing exist. This allows people to hack in annotations all in one file arch/alpha/ev5.cc: arch/alpha/ev5.hh: intervals are really annotations arch/alpha/ev5.cc: Factor out more annotations arch/alpha/ev5.cc: sim/simple_cpu.cc: Make an Annotate namespace, and add a DumpStats method to it dev/disk_image.cc: sim/main.cc: sim/sim_events.cc: sim/sim_exit.hh: Normalize exit-related function names. Move exitNow() prototype to simexit.hh. base/misc.cc: base/trace.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Minor cleanup on new tracing code: - namespace cleanup - fix bug in Trace::Log::dump - added new RawDumpRecord to put raw data in trace buffer (call Trace::rawDump, was Trace::dump) - added --trace:flags=All to set all trace flag bits - added --trace:dump_on_exit option to dump trace buffer on normal exit - DPRINTF now requires 'const char *' for format (not string) so it doesn't go away by the time buffer is dumped sim/sat_counter.hh: sim/serialize.hh: foo(void) --> foo() This commit is equivalent to doing the following in the sim directory: perl -pi -e 's/\(void\)/()/' *.cc *.hh sim/base_cpu.hh: sim/eventq.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: Move dump() and reg_stats() implementations out of header files. Clean up #includes. sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: Clean up identification and handling of prefetches and no-ops. Added is_data_prefettch() method to DynInst. (One of these days we'll have to change all those functions to isFoo() style.) Changes nop count statistic... we were only counting Alpha UNOPs before, not all Alpha NOP forms. sim/pc_event.cc: sim/simple_cpu.cc: - Strip opt binaries after build - Update Makefile for new source files - Fix BHGP prefetcher to use compressed addresses - Fix FULL_SYSTEM compile problems (missing header includes) base/inifile.cc: Make it possible to override variables in the inifile and on the command line sim/simple_cpu.cc: sim/simple_cpu.hh: - Make the SLAT useable with SimpleCPU for quick and easy debugging. This required refactoring some of the traits classes which should make them marginally more independent. - Fix bogus assert in the SLAT code. Alias load/store values should only be assumed equivalent in non-spec mode. sim/simple_cpu.cc: - Must send the saved address to the SLAT for all memory operations because execution could have overwritten the base register. sim/simple_cpu.cc: sim/simple_cpu.hh: Added Parameter for CPU identification number in Full System Primary CPU ID is 0, which is the default value Modified to start all CPU's in Halted status except the primary CPU dev/alpha_console.cc: Added comments to code for needed implementation in order to boot second CPU dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Added array of Execution Contexts to system.hh Used when trying to launch another CPU Added cpu_id to Full System ExecContext Fixed the launch in alpha_console.cc to access the correct exe_ctx dev/alpha_console.cc: sim/simple_cpu.cc: Fixed initializtion and launch of the second processor Added a gdb-alpha debug port for non-primary processor Cleaned up the .ini file of unneeded disk images sim/simple_cpu.cc: Add cpu_id (see Ron's recent commit) to full-system detailed CPU. base/trace.cc: Fix bug in calling dumpTrace() on partially filled trace buffer. test/Makefile: test/lru_test.cc: - Replace BHGP associative table with something simpler. - Add lru_test to test out new AssociativeTable class. Doxyfile: Only create documentation for documnented classes dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: cleanup and formatting sim/simple_cpu.cc: Fix bus queueing delay and idle stats. Slight change to one scheduling case. Set req->time in SimpleCPU so delays are correctly computed. sim/simple_cpu.cc: Don't do an icache fetch if we had an ITLB miss. arch/alpha/alpha_memory.cc: dev/alpha_console.cc: sim/serialize.cc: sim/serialize.hh: Replace include of inifile.hh in serialize.hh with forward decl of class IniFile. Requires adding explicit include of inifile.hh in several .cc files. sim/eventq.hh: Get rid of needless include of inifile.hh. sim/main.cc: base/inifile.cc: base/inifile.hh: Check for unreferenced parameters to detect obsolete settings and typos. A warning for an unreferenced parameter section can be suppressed by adding a 'unref_section_ok=y' parameter to the section. Warnings for any unreferenced parameters within a section can be suppressed by adding a 'unref_entries_ok=y' parameter to the section. (The value doesn't matter; the presence of the parameter is all that is tested.) By default any unreferenced parameter or parameter section warnings will cause the simulator to terminate. Use the '-u' command-line option to suppress this behavior (at your own risk!). dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: Add some Doxygen comments. Mostly putting in markers for the file and classes Also some minor formatting fixes here and there arch/alpha/ev5.cc: Reindent to 4 spaces (plus a few other very minor formatting changes). arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: Reindent. sim/eventq.hh: Don't even bother with the description unless TRACING_ON is defined. Not a big deal at this point, since TRACING_ON is currently hardcoded to 1 in base/trace.hh. base/remote_gdb.cc: base/trace.hh: sim/eventq.cc: sim/eventq.hh: sim/system.cc: Clarify debugging defines: - DEBUG is either defined or not, but is not given a value. It should be tested with #ifdef. - TRACING_ON is always defined, either with a 0 or 1 value. It should always be tested with #if. Automatically set TRACING_ON value according to whether DEBUG is defined. Added -Wundef to warnings to catch '#if DEBUG' cases. (Yes, '#if DEBUG' does the right thing if DEBUG is not defined, but the same is not true for '#ifdef TRACING_ON' if TRACING_ON is defined to 0.) In the long run, perhaps the uses of TRACING_ON outside of the trace package itself should be converted to use DEBUG. sim/pc_event.cc: Looks like a lot of device code has never been compiled w/o TRACING_ON set; fix up several warnings (mostly unused variables). sim/pc_event.cc: Oops... needs to compile w/o FULL_SYSTEM too. base/trace.hh: sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Fix up parameter printing controls. Parameters are always printed by default; new command-line parameter '-q' turns this off. Old system was broken in two ways: there was no way to turn off printing in the optimized binary, and controlling printing with a trace flag bit (specified as an .ini parameter) meant that parameters parsed *before* trace:flags never got printed. Also added code to print the names of unspecified parameters as comments in the output. base/remote_gdb.cc: base/trace.hh: A couple more changes to get full-system to compile w/o tracing. sim/simple_cpu.hh: sim/simple_cpu.cc: - Add stats for simple SLAT profiling sim/simple_cpu.cc: Extend HAVE_TSL protection so it can compile without TSL base/trace.cc: Need to update flag strings to match enum... yuck. sim/system.cc: sim/system.hh: Build global list of system objects. Add gdb-callable printSystems() function so we can find system object pointers from inside debugger. sim/eventq.cc: sim/simple_cpu.cc: base/pollevent.cc: base/pollevent.hh: Move pollQueue handling into main event loop so it works regardless of the CPU model. arch/alpha/ev5.cc: Protect IPRs etc. from being modified on misspeculated paths. arch/alpha/ev5.hh: Eliminate some unused macros. arch/alpha/alpha_memory.cc: Don't update IPRs for TLB misses on misspeculated instructions. Set req.flags PHYSICAL and UNCACHEABLE bits as appropriate based on results of translation. sim/param.cc: Move ConfigHierarchy::Node definition into separate file so it can be included only where necessary. arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/inifile.cc: base/inifile.hh: base/misc.hh: base/mod_num.hh: base/pollevent.cc: base/remote_gdb.cc: base/sched_list.hh: base/socket.cc: base/socket.hh: base/str.cc: base/str.hh: base/symtab.cc: dev/alpha_access.h: dev/etherint.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/predictor.hh: sim/sat_counter.cc: sim/sim_object.cc: sim/simple_cpu.hh: test/cprintftest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/sized_test.cc: test/symtest.cc: util/tap/tap.cc: Add CVS Id tags dev/alpha_console.cc: dev/alpha_console.hh: Get rid of pmask field in MemReq; move address mask into devices by adding to common base class FunctionalMemory. base/inifile.cc: Don't complain if "unref_section_ok" or "unref_entries_ok" are not referenced. base/inifile.cc: Add functionality to "unref_entries_ok": Now, the RHS is parsed for a list of unreferenced entries, only these will be "OK" Note that this will not be needed very often... base/trace.cc: sim/exetrace.cc: Make trace cycle number position and format consistent between DPRINTF trace records and exetrace records. sim/debug.cc: Add "debug" parameter context for global debug options. Add parameter "debug:break_cycles" to set DebugBreakEvent(s) from ini file/command line. sim/pc_event.cc: sim/system.hh: sched_break_pc() now sets a breakpoint on *all* systems. Use sched_break_pc_sys() to set a breakpoint on just one system. sim/debug.cc: sim/pc_event.cc: base/cprintf_formats.hh: using namespace std dev/alpha_console.cc: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: arch/alpha/fake_syscall.cc: sim/prog.cc: use accessor functions to set/get status to prepare to not call SimpleCPU::tick if there is nothing to do sim/simple_cpu.cc: no more simplescalar here base/trace.hh: Only set TRACING_ON according to DEBUG if it hasn't already been set on the command line. base/trace.cc: If compiled with TRACING_ON=0, give an error if the user tries to turn on tracing. sim/main.cc: Get rid of do-nothing segfault handler... if you get a segfault in an exit handler, you end up with an infinite recursion. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Full-system detailed CPU almost almost there. Big reorganization of virtual address translation code, so we can tell an access is uncached soon enough to suppress it if it's on the wrong path: translation is its own step now, not hidden inside the (former) VirtualMemory object. Also a few other changes to avoid bad things on misspeculated paths. This commit results in *very* small changes in IPCs and MSIPCs (a few tenths of a percent max on the tests) because some wrong-path instructions get handled a little differently. sim/main.cc: Put quotes around args with spaces when echoing command line. sim/pc_event.cc: Process PC Events just before fetching the relevant instruction instead of just after the previous instruction. Keeps us from missing events when we take off on misspeculated paths. ** Detailed CPU now gets to single-user prompt!! ** sim/base_cpu.hh: sim/eventq.hh: sim/main.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the TickAllEvent and make it so each cpu has its own tick event. In the process, the implementation of the virtual functin tick() got moved into a non virtual function _tick() so that the tick event could be CPU specific and you wouldn't pay the virtual function call overhead. This is another step towards being able to not tick a cpu if it has nothing to do sim/base_cpu.hh: sim/simple_cpu.hh: Now that tick is called via an event, we no longer need a virtual function sim/base_cpu.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: clean up the tick event stuff and get rid of the TickEvent template class and just make one for each class since you may want a different process() function anyway base/trace.cc: base/trace.hh: sim/base_cpu.hh: sim/pc_event.cc: sim/pc_event.hh: Fix up branch predictor's return address stack when we do a SkipFuncEvent. Since there's no easy way to figure out what thread ID we're on from the SkipFuncEvent, we just fix thread 0's RAS... will need to fix this when we get SMT full-system up. Also: - Moved RAS tracing stuff to DPRINTFs; added BranchPredRAS trace flag. - Made BadAddrEvent derive from SkipFuncEvent to eliminate code duplication. base/trace.cc: sim/eventq.cc: sim/eventq.hh: sim/serialize.cc: Create a flags bitvector in the event to store flags. Holds what used to be squashed and scheduled, and also contains a new flag for auto delete. The auto delete flag will make the eventq responsible for calling delete on an event. This makes 'delete this' unnecessary in the process() function. This is most beneficial for events that get squashed since process() never gets called, and one might want to have the data reclaimed. To use the autodelete functionality with squash, a few events were cleaned up and reorganized sim/exec_context.cc: sim/exec_context.hh: sim/pc_event.cc: sim/simple_cpu.cc: Add thread_num field to ExecContext so it knows which CPU thread context it represents. Need this for the SkipFuncEvent RAS fixup, but seems generally useful. dev/etherdump.cc: use time.h instead of sys/time.h sim/simple_cpu.cc: sim/simple_cpu.hh: move the tick schedule() to where it's needed dev/alpha_console.cc: dev/alpha_console.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/intr_control.cc: sim/intr_control.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: get rid of the processor SimObject and move all of the interrupt stuff into BaseCPU since it really is part of the CPU anyway sim/exec_context.hh: fix store conditional sim/exec_context.hh: clean up conditional store so that it's more understandable sim/base_cpu.cc: sim/base_cpu.hh: move interrupt set/clear routines into the .cc file and make them virtual so that CPUs derived from BaseCPU can modify the behaviour of the interrupt routine. base/trace.cc: base/trace.hh: New trace flags generation via perl script. Now if you want to add a flag you just type it once (in the script) and all the C++ is generated automagically. Also supports "compound" flags that can be specified on the command line and map to multiple regular flags. Switched trace flags from 64-bit bitmap to vector<bool> for scalability. base/trace.cc: comment out the offending assign since it is commented as not needed base/trace.cc: Get rid of useless code. sim/base_cpu.cc: sim/base_cpu.hh: change variable name to avoid confusion arch/alpha/ev5.cc: sim/simple_cpu.cc: Remove a bunch of istats stuff and insert some annotations for where they were. sim/debug.cc: add a function to force stats to be dumped from the debugger sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Don't schedule tickEvent until it is known that there will be something to do test/Makefile: Make tests compile again test/Makefile: Make the whole build process for tests a bit simpler util/tap/Makefile: make this build again, clean stuff up sim/exec_context.cc: sim/simple_cpu.cc: make stuff compile when not FULL_SYSTEM sim/main.cc: Add the name of the execution host to the output sim/main.cc: Don't free() data returned by getenv. besides, free() is a function, not an operator like sizeof sim/eventq.cc: That assertion should have never been committed sim/simple_cpu.cc: don't tick here sim/eventq.cc: the squashed flag should be cleared once the event has actually been processed sim/simple_cpu.cc: we can get here with a dcache miss as well. sim/simple_cpu.cc: only schedule the event if it is not already scheduled. arch/alpha/fake_syscall.cc: Zero out syscall arg buffer to avoid copying garbage into simulator space. sim/exec_context.hh: Translation in non fullsystem mode. And use the FALRU class to implement FA LRU caches. sim/base_cpu.hh: sim/exec_context.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Reorganize code a bit so that multiple CPUs can properly work with the new tick as event stuff. arch/alpha/arguments.hh: base/cprintf.hh: base/refcnt.hh: dev/etherpkt.hh: Make a refcounted base class that contains the refcounting stuff and make everything use it sim/main.cc: don't print out the host if we didn't find one dev/alpha_console.cc: dev/alpha_console.hh: s/memreq/MemReq/ base/trace.cc: Add support to echo trace output (DPRINTF etc.) to cerr as well as the trace buffer. From gdb, call "echoTrace(1)" to enable, or "echoTrace(0)" to disable. As a side effect, semantics of setting both trace:bufsize and trace:file are different now (will buffer and send to file, where old version would just buffer), but I doubt anyone ever did that anyway. See comments in file for more details. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/memtest.cc: sim/memtest.hh: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Revamp event debug/tracing structure. - virtual const char *description() method replaces description string constructor argument. Lets us associate a fixed description string with each class of events with basically no overhead. - virtual void trace(char *action) method lets event subclasses customize tracing DPRINTF call to put in additional information. Currently only used by WritebackEvent (to print sequence number of associated instruction). dev/etherbus.cc: dev/etherbus.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.hh: Fix up full-system events for new debug structure. base/trace.cc: Looks like g++ 3 doesn't like "string = bool ? string : char*". sim/simple_cpu.cc: the caches currently won't completion events for UNCACHEABLE accesses, so don't send any. Warning, this is a HACK! dev/etherdump.cc: sim/main.cc: cleanup includes, and remove some #ifdef cruft for BFD sim/sim_exit.hh: Added GDB-callable exitNow() using char * sim/sim_events.hh: Need to include eventq.hh here. test/Makefile: There are no OPT_FLAGS arch/alpha/fake_syscall.cc: dev/etherdump.cc: sim/eventq.cc: sim/main.cc: sim/memtest.cc: sim/serialize.cc: sim/sim_events.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/system.cc: Get rid of sim.h & sim_smt.hh. Most of what was in those was obsolete anyway. Move needed externs into universe.hh & stats.hh, plus new header file sim_time.hh. sim/memtest.cc: sim/memtest.hh: Update memtest cpu to new tickEvent stuff base/remote_gdb.cc: Adding returns to make insure happy. sim/simple_cpu.cc: Rework Interporcessor Interrupts to properly signal second CPU, and unsuspend it sim/intr_control.hh: Fix clock interrupt to signal both proccesors correctly in MP system sim/system.cc: Fix seg fault in single proccesor mode from last commit, MP now boots with 2 CPUs sim/simple_cpu.cc: sim/system.cc: sim/system.hh: Changes to genaralize the interupt scheme to variable number of proccessors base/misc.cc: only dump the trace buffer if tracing is turned on base/str.cc: properly deal with the case where there is only one string in the list base/cprintf.cc: base/cprintf.hh: Add csprintf() to print to a string (sort of like sprintf()) base/cprintf.cc: be consistent about resetting parameters to original values base/cprintf.cc: cleanup base/statistics.cc: base/statistics.hh: Finally commit my new stats package and stop tinkering with it. This new stats package has support for all sorts of stuff. Documentation will appear in the code in a future commit. test/Makefile: test/stattest.cc: add tests for the statistics package. This exercises all sorts of different capabilities of the stats package and can be used for examples. util/rundiff: rundiff utility Normal diff reads in all of both input files and tries to generate a minimal diff, for super long trace files, this is bad because it takes forever and you run out of memory. rundiff is designed to scan the input files and compare only 2000 lines at a time. This way memory won't run out and a user can use fifos for input files. sim/exetrace.cc: Print all reg results as 0x%016x. arch/alpha/fake_syscall.cc: base/misc.cc: base/misc.hh: base/pollevent.cc: base/pollevent.hh: base/statistics.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherdump.hh: dev/etherlink.cc: dev/etherlink.hh: dev/ethertap.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/hybrid_pred.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/prog.hh: sim/sat_counter.hh: sim/serialize.cc: sim/sim_events.cc: sim/sim_events.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/universe.cc: test/nmtest.cc: test/stattest.cc: test/symtest.cc: Global variable renaming. Basically equivalent to the following perl: s/\btick_t\b/Tick/g; s/\bsim_cycle\b/curTick/g; s/\bcounter_t\b/Counter/g; s/\bsim_freq\b/ticksPerSecond/g; dev/console.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: Get rid of some explicit externs (use header files!). dev/ethertap.cc: Include for panic(). arch/alpha/alpha_memory.cc: sim/exec_context.hh: Various bug fixes. Charge all writebacks to thread 0 sim/eventq.cc: sim/eventq.hh: sim/main.cc: rework the event loop a bit so that we can prepare for dealing with asynchronous events properly. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: base/refcnt.hh: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Initial move to reference counting MemReq objects. Switched to STL containers for storage in the memory hierarchy. sim/exec_context.hh: Fix LL/SC and got 1-6 CPUs working by fixing clock interrupt sim/simple_cpu.cc: Add the IIC as a selectable cache tag. Fix translation for now with a quick hack. sim/exec_context.hh: Put detection logic on failed Store Conditionals to help detect deadlock situations util/term/Makefile: util/term/term.c: Whittle down netcat to the bare minimum to connect to another machine and add the proper stuff to do some terminal handling to make this utility sufficient for connecting to m5 to get a console util/term/Makefile: add an install target base/pollevent.cc: sim/async.hh: sim/main.cc: Don't create events in signal handlers since it really isn't safe. I'm not positive if some bugs I've seen were caused by this, but we may as well be safe base/pollevent.cc: base/pollevent.hh: dev/console.cc: dev/console.hh: sim/async.hh: sim/main.cc: - clean up the pollevent stuff and just do the poll whenever requested since we will request it with the proper frequency - add an alarm to poll once every second in addition to waiting for sigio - remove all of the telnet crap since I'm never planning on implementing it - fix detaching and re-attaching of consoles base/pollevent.cc: base/pollevent.hh: sim/main.cc: only handle/raise SIGALRM if we're polling sim/memtest.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: Initial check in of Compression stuff and IIC subblocking. base/remote_gdb.cc: Get rid of needless extern. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: dev/alpha_console.hh: sim/exec_context.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: Rename fault type and fault codes as follows: s/md_fault_type/Fault/g; s/md_fault_none/No_Fault/g; s/md_fault_mcheck/Machine_Check_Fault/g; s/md_fault_opdec/Unimplemented_Opcode_Fault/g; s/md_fault_alignment/Alignment_Fault/g; s/md_fault_overflow/Integer_Overflow_Fault/g; s/md_fault_reset/Reset_Fault/g; s/md_fault_arith/Arithmetic_Fault/g; s/md_fault_interrupt/Interrupt_Fault/g; s/md_fault_ndtb_miss/Ndtb_Miss_Fault/g; s/md_fault_pdtb_miss/Pdtb_Miss_Fault/g; s/md_fault_dtb_fault/Dtb_Fault_Fault/g; s/md_fault_dtb_acv/Dtb_Acv_Fault/g; s/md_fault_itb_miss/Itb_Miss_Fault/g; s/md_fault_itb_fault/Itb_Fault_Fault/g; s/md_fault_itb_acv/Itb_Acv_Fault/g; s/md_fault_fen/Fen_Fault/g; s/md_fault_pal/Pal_Fault/g; s/md_fault_NUM/Num_Faults/g; Also changed 'enum md_fault_type' to just 'Fault' where possible. sim/exec_context.cc: sim/exec_context.hh: Add a constructor to specify a memory without a process sim/eventq.hh: clean up a bit. When events are resecheduled or removed from the schedule, they are no longer squashed. (Only scheduled events can be squashed.) sim/simple_cpu.hh: check to see if the tick event was squashed. If it was squashed, then it must be rescheduled since squashed events are scheduled. sim/exec_context.cc: sim/exec_context.hh: This new constructor is only for non FULL_SYSTEM base/statistics.cc: base/statistics.hh: test/stattest.cc: Remove unused variable dumpStats -> dump initStats -> init use const string & instead of const char * make Base constructor explicit more consistent formatting widths sim/main.cc: sim/sim_events.cc: make the new stats package useable in the simulator base/statistics.cc: base/statistics.hh: test/stattest.cc: create two standard stats that are to be used for calculations: elapsedTicks - is the number of ticks that has elapsed during this simulation. Currently, this is just curTick, but this may change when we have checkpointing. elapsedSeconds - is the number of simulated seconds that have elapsed during the simulation. Currently, this is just elapsedTicks / ticksPerSecond. sim/main.cc: Need to initialize stats much sooner so that SimObject constructors can register statistics base/statistics.cc: - use the stat_print_descriptions variable that the old stats package provides this is just a quick hack for now. When the old stats package goes away, we'll move this. - Fix the sorting algorithm so it works as I had intended - Make the output field widths equivalent to the old stats package base/statistics.cc: clean up memory sim/sim_events.cc: sim/sim_events.hh: Use autodelete sim/sim_events.cc: oops. didn't mean to commit this part util/tap/Makefile: call it m5tap instead of ethertap sim/exec_context.hh: Get rid of a couple of unnecessary forward class declarations. sim/memtest.cc: sim/memtest.hh: Adds compression to the memory hierarchy as well as using ExecContext to access memory. Added a few related config files. base/cprintf.cc: Default fill char is space, regardless of what stream fill char is. sim/exetrace.cc: Convert some of the hairier format things to ccprintf. base/statistics.cc: try getting the sorting a bit better arch/alpha/arguments.hh: base/refcnt.hh: base/statistics.hh: dev/etherpkt.hh: s/refcounted/RefCounted/ s/refcnt/RefCountingPtr/ arch/alpha/fake_syscall.cc: Zero out register files for newly created threads to make non-full-system MP runs deterministic. sim/exetrace.cc: Don't trace the results of NOPs or prefetches (for easier comparison with traces from new decoder). sim/exetrace.cc: Don't trace branch link values written back to R31 either. Also put a ifdef TARGET_ALPHA around this hack. sim/exetrace.cc: Need another ifdef TARGET_ALPHA... arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/object_file.hh: base/remote_gdb.cc: base/remote_gdb.hh: base/symtab.cc: base/symtab.hh: dev/alpha_console.cc: dev/simple_disk.cc: dev/simple_disk.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.hh: sim/memtest.cc: sim/memtest.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: test/nmtest.cc: test/symtest.cc: Massive renaming to (almost) eliminate all md_* and MD_* names in preparation for total exorcism of machine.def. Most of the changes in this commit were performed with the following perl script (perl -pi <script> <files>). A small amount of manual fixup was needed to (mostly getting rid of the Addr typedefs in the various memory objects now that the former md_addr_t has that name). # rename machine-dependent types and constants (will be moving into ISA traits object) s/md_addr_t/Addr/g; s/md_intreg_t/IntReg/g; s/md_gpr_t/IntRegFile/g; s/md_fpreg_t/FloatReg/g; s/md_fpr_t/FloatRegFile/g; s/md_ctrlreg_t/MiscReg/g; s/md_ctrl_t/MiscRegFile/g; s/md_ipr_t/InternalProcReg/g; s/md_anyreg_t/AnyReg/g; s/md_inst_t/MachInst/g; s/regs_t/RegFile/g; # manually fix declaration in old/regs.h and a few forward decls s/struct RegFile/RegFile/g; s/MD_NUM_IREGS/NumIntRegs/g; s/MD_NUM_FREGS/NumFloatRegs/g; s/MD_NUM_CREGS/NumMiscRegs/g; s/MD_IPR_NUM/NumInternalProcRegs/g; s/MD_TOTAL_REGS/TotalNumRegs/g; s/MD_REG_ZERO/ZeroReg/g; base/statistics.hh: test/stattest.cc: Create a functor() wrapper for the stats package. This wrapper makes it possible to write an actual function or functor that is evaluated in a Formula base/statistics.hh: test/stattest.cc: Implement operator += for formulas. This allows us to build a formula without knowing all variables involved at compile time sim/sim_object.cc: sim/sim_object.hh: Make a different regStats pass for the new stats package base/statistics.cc: base/statistics.hh: sim/main.cc: Move simulator specific stuff to its own file. rename elapsedFoo to simFoo so it's clear we're talking about what's been simulated. Use the functor method to get the time. sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Convert instruction counting to new stats package. Convert the rest of SimpleCPU to new stats Do a bit of cleanup while we're at it base/cprintf.cc: attempt to deal with the badbit problem sim/base_cpu.hh: sim/simple_cpu.cc: no need for reg_stats to be pure virtual base/statistics.cc: base/statistics.hh: sim/simple_cpu.hh: test/stattest.cc: change names of stat classes so they are simpler base/statistics.cc: no unregestering stats base/statistics.cc: base/statistics.hh: sim/main.cc: test/stattest.cc: make it so that none of the constructors for the various stats objects take any parameters so that users may put them in arrays and stuff. Instead provide initialization functions for the objects that needed parameters, and provide a way to verify that all statistics that need initialization do get initialized. sim/cache/lzss_compression.hh: Compression fixes. Added trivial data support to the IIC. Set the max write size in the compressed memory to 1024 bytes sim/memtest.cc: sim/memtest.hh: Added 'percent_uncacheable' option to MemTest base/statistics.cc: base/statistics.hh: keep track of more data in distributions use a struct to pass data to the display function take underflow and overflow out of the array base/statistics.cc: support for printing vector totals sim/memtest.cc: sim/memtest.hh: Fix uncacheables to go to their own memory space. sim/memtest.cc: Change default percentage of uncacheables to 10% base/statistics.cc: base/statistics.hh: Correctly calculate vector totals. When a formula operates on vectors, it is incorrect to do calculate the formula for each vector element, and then sum the final formula vector. The correct way is to sum the individual vectors at the leaves of the expression tree. And then perform the calculation as if it were on scalar values. Assume we have vectors A, and B, and X = A * B The old way would have been: total(X) = total(A * B) The new way is total(X) = total(A) * total(B) Per thread miss rates are and example of something that would be calculated incorrectly. If you were to sum all of the miss rates, you could get a number greater than one. Calculating the overall miss rate should just be overall misses / overall accesses base/statistics.cc: base/statistics.hh: Create a #define STAT_DISPLAY_COMPAT that makes the new stat package output match the old one. arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_desc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/circlebuf.hh: base/object_file.hh: base/remote_gdb.cc: base/symtab.hh: dev/alpha_console.cc: dev/console.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/main.cc: sim/op_class.hh: sim/pc_event.cc: sim/pc_event.hh: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/system.cc: sim/system.hh: New ISA description system. No more machine.def! Instructions are now decoded into StaticInst objects, and all static instruction properties (including execution behavior) are associated with those objects. Extended documentation in progress. Currently supports Alpha only; PISA will not compile. Use END_OF_MACHINE_DOT_DEF tag to extract previous version. arch/isa_parser.py: Make it more obvious that you shouldn't edit decoder.cc, and harder to do so accidentally. arch/alpha/isa_desc: base/statistics.cc: sim/exec_context.hh: make stuff compile in g++ 3.x fix some bad formatting Doxyfile: Put generated docs in local directory docs/doxygen. Don't bother generating LaTeX, and a few other minor tweaks. arch/isa_parser.py: arch/alpha/isa_desc: - Decouple isa_desc operand types from C++ types. - Handle signed operand writebacks. - Add a few comments to suppress doxygen warnings on decoder.cc. sim/static_inst.cc: sim/static_inst.hh: Add some basic decode cache hash-table stats dumping (ifdef'd out). sim/static_inst.cc: Make it compile w/gcc3. sim/static_inst.cc: ostream doesn't seem to exist in 2.95 arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: TLB statistics arch/alpha/ev5.cc: always pass the execution context to an annotation arch/alpha/ev5.cc: revert a bunch of crap from the last commit that I didn't want yet. arch/isa_parser.py: make it so that the ext source directory is grabbed from the right place arch/alpha/alpha_memory.cc: arch/alpha/ev5.cc: arch/alpha/isa_desc: arch/alpha/vtophys.cc: base/remote_gdb.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/simple_cpu.cc: get rid of MD_IPR_foo and call it IPR_foo add some comments to describe what the various PALtemp registers do formatting sim/base_cpu.cc: sim/base_cpu.hh: sim/exec_context.cc: sim/exec_context.hh: sim/simple_cpu.cc: Keep a list of execution contexts in BaseCPU Provide a mechanism to register per execution context statistics. base/socket.cc: base/remote_gdb.cc: dev/console.cc: dev/ethertap.cc: don't panic if accept fails sim/simple_cpu.cc: sim/simple_cpu.hh: keep track of fraction of cycles that are idle base/statistics.hh: make proxy nodes work better in formulas. (Now totals should work). sim/op_class.hh: Document OpClass enum. sim/op_class.hh: Need to document file for file members (enum, globals, etc.) to be extracted arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: Move Fault into its own file, and provide a function to get the string name of a fault arch/alpha/ev5.cc: arch/alpha/ev5.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: move PAL code defines and such into their own file. Also provide a function to get the name of a PAL code arch/alpha/osfpal.cc: make this actually compile and add it to the makefile kern/tru64/tru64.hh: dummy class for differentiating Tru64 kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: Stuff on tru64 system calls arch/alpha/ev5.cc: arch/alpha/isa_desc: sim/exec_context.cc: sim/exec_context.hh: Add a bunch of full system statistics base/statistics.cc: base/statistics.hh: sim/sim_events.cc: support for printing stats to a file. For now we will continue to print to standard out so that the whole regression thing doesn't break. While we're at it, move the Stat param context to the new stats package sim/exec_context.hh: sim/main.cc: sim/simple_cpu.cc: sim/simple_cpu.hh: Today saw the wholesale slaughter of greened's code. When we asked the accused, Erik Hallnor, why he did it he responded, 'Because I was bored. And the underlying prefetch cache was soon to be 2 generations out of date.' sim/base_cpu.hh: sim/exec_context.cc: added a std::vector and using namespace std arch/alpha/fake_syscall.cc: Avoid conflicts with #defines in headers arch/alpha/fake_syscall.cc: I think this is what steve had in mind. base/endian.hh: get rid of the simplescalar endianness junk and make it a bit simpler base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Break out the cprintf formatting stuff into per-type formatting so that we can do special formatting based on type. This makes %c work correctly for integer types. It also allows me to add a workaround for string format widths. Finally, it allows me to accept stringstream directly as an argument without having to use the .str() member. Doxyfile: Update Doxyfile to new version of doxygen and to use the newly install graphviz package. Doxyfile: Remove . from the file paths, instead of .. base/cprintf.cc: base/cprintf_formats.hh: base/statistics.cc: test/cprintftest.cc: Fix printing of strings. Seems that I just can't do what I want with templates. They're too smart for they're own good. Fix format field widths for floating point numbers. Remove some .str()'s that are no longer needed because cprintf supports them. base/statistics.cc: base/statistics.hh: test/stattest.cc: Make internal design a bit more consistent. Re-work Bins and Vectors and how they work together to remove a level of indirection. base/statistics.cc: base/statistics.hh: revert that last change base/statistics.cc: base/statistics.hh: test/stattest.cc: let's try this again. This time we'll make DistStat classes initialize their bins. Also add a test for this base/statistics.hh: Proxy -> VectorProxy Doxyfile: Don't hide undocumented classes. This helps when tracking includes through the new graphs. Doxyfile: Make things run faster until documentation errors are gone sim/prog.cc: sim/simple_cpu.cc: Change declarations to match defenitions. dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: sim/eventq.hh: sim/serialize.hh: sim/sim_object.hh: sim/simple_cpu.cc: Removal of 1200 doxygen warnings. The 600 left are mostly from StaticInstBase and decoder.cc. I basically un-documented the partially documented code by changing /** to /*. arch/alpha/ev5.cc: Add FULL_SYSTEM protection to match header file. Doxyfile: dev/alpha_console.hh: dev/etherint.hh: dev/simple_disk.hh: sim/simple_cpu.cc: sim/static_inst.hh: sim/cache/null_compression.hh: Down to 464 warnings, all in static_inst.hh or decoder.cc. Punt on the template instantiation thing by making them invisible to doxygen. arch/alpha/alpha_memory.cc: base/statistics.cc: base/statistics.hh: sim/simple_cpu.cc: test/stattest.cc: New way of specifying information about printing stats. old way: stat.setFormat(name, ...); new way: stat .name(...) .desc(...) .prereq(...) . . ; This allows you to specify any information about the stats, and do it in any order. It also cleans up the kinda crufty setFormat interfaces. LICENSE: This is the M5 license as agreed upon by the original M5 authors, and blessed by the University of Michigan technology transfer office. OK by Doug Hockstad <dhocksta@umich.edu> base/statistics.hh: missing_math is only for stats, so move it into its own place base/statistics.cc: test/stattest.cc: Fix stats sorting base/statistics.cc: base/statistics.hh: test/stattest.cc: Fix description printing stuff. Add a flag to the test script to turn descriptions on/off base/str.hh: wrapper to convert values to strings via stringstream base/statistics.hh: nitpick base/statistics.cc: base/statistics.hh: test/stattest.cc: Rework the printing of statistics to make the PrintOne function not need to know about the stats themselves. Also remove the overloading of function names for getting and setting parameters. base/statistics.cc: duh base/statistics.cc: Changes for _name issues base/statistics.cc: base/statistics.hh: Reorganize the base Stat class a bit and clean up handling of data base/statistics.cc: base/statistics.hh: Rework the stat printing stuff a bit so that the formatting parts need to know as little as possible about the type of stat being printed. base/statistics.hh: maybe not all vector stats will be registered in the future. (VectorProxies) base/statistics.hh: test/stattest.cc: VectorDistribution stat. To be used for per-thread distributions. Still need to implement total and zero() arch/alpha/isa_traits.hh: sim/static_inst.hh: don't use stdint.h, use either inttypes.h or host.h sim/main.cc: unneeded arch/alpha/isa_desc: only linux seems to support the rounding mode stuff right now base/statistics.hh: test/stattest.cc: VectorStandardDeviation and VectorAverageDeviation base/statistics.cc: just make sure the size is correct base/statistics.hh: use pointers internally instead of references arch/alpha/faults.cc: base/bitfield.hh: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/op_class.hh: sim/sim_time.hh: sim/static_inst.cc: sim/static_inst.hh: test/stattest.cc: consistent $Id$ tags test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: arch/isa_parser.py: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/isa_parser.py: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: util/tap/tap.cc: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/intmath.h: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/pcireg.h: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/cache/null_compression.hh: sim/async.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exetrace.cc: sim/exetrace.hh: sim/intr_control.cc: sim/intr_control.hh: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: sim/exec_context.cc: sim/exec_context.hh: license base/date.cc: move test/stattest.cc: remove dave's scary container stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/simple_cpu.cc: rename the exec context list xc to contexts arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/fake_syscall.cc: dev/alpha_console.cc: sim/exec_context.hh: sim/memtest.cc: sim/prog.cc: sim/prog.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/system.cc: sim/system.hh: s/exe_ctx/xc/g sim/base_cpu.cc: Can't assume that context[0] exists. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Our compression code free and clear. arch/alpha/fake_syscall.cc: base/range.hh: base/statistics.hh: sim/param.cc: sim/sim_object.cc: Changes to build with g++-3.3. Mostly added a bunch of includes of assert.h (not sure why older versions didn't need this). Also fixed up a couple other new warnings. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: dev/alpha_console.hh: dev/console.cc: dev/console.hh: dev/disk_image.cc: dev/etherdump.cc: dev/simple_disk.cc: sim/simple_cpu.cc: sim/system.cc: sim/system.hh: a little style sim/eventq.cc: sim/main.cc: sim/prog.cc: sim/simple_cpu.cc: sim/smt.hh: smt.h -> smt.hh add license base/statistics.hh: missing_math.hh isn't really needed I guess arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/isa_traits.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/misc.cc: base/pollevent.cc: base/socket.cc: base/statistics.hh: base/symtab.cc: base/symtab.hh: base/trace.hh: dev/alpha_console.hh: dev/etherlink.hh: dev/etherpkt.hh: sim/eventq.hh: sim/exec_context.hh: sim/exetrace.hh: sim/host.hh: sim/main.cc: sim/param.hh: sim/serialize.hh: sim/sim_object.cc: sim/simple_cpu.cc: sim/static_inst.hh: sim/universe.cc: test/stattest.cc: Get rid of simplescalar host.h file and create our own host.hh file that has less junk. (with our license.) While we're at it, we consolidate all of the hashtable junk into one file hashmap.hh. (use this file if you need a hash_map.) Doxyfile: Avoid infinite recursion on build/src link. arch/alpha/isa_desc: sim/static_inst.hh: Add comments to get rid of doxygen warnings (and occasionally, as an accidental side effect, make the code more maintainable). Doxyfile: Turn off information messages and route error messages to stderr. arch/isa_parser.py: arch/alpha/isa_desc: sim/static_inst.hh: - Add some comments clarifying the semantics of StaticInst flags. - Make minor tweaks to the ISA description code to make corner cases consistent with the above comments :-). - Get rid of insn_counting code... instruction mix doesn't really change through the pipeline, and the overall mix can already be derived from existing stats. Plus it keeps changing when the ISA flags change even though the pipeline doesn't care. sim/hybrid_pred.cc: sim/hybrid_pred.hh: So said Steve Raasch:xi "I know that the following files should be under our license" base/fast_alloc.cc: base/fast_alloc.hh: David Wood said I could have my own code back :-). sim/sim_object.cc: sim/sim_object.hh: create a regFormulas pass that will go AFTER the regStats pass. sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/eventq.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_object.hh: sim/sim_time.hh: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: style police base/statistics.cc: base/statistics.hh: test/stattest.cc: initial cut at a 2d vector stat base/statistics.cc: base/statistics.hh: Added a std:: and removed an unused bool arch/alpha/fake_syscall.cc: sim/base_cpu.cc: sim/base_cpu.hh: sim/prog.cc: sim/prog.hh: Steve Reinhardt says "I wrote these myself from scratch" base/date.cc: I probably changed this to a string in the first place, but it should be a const char * sim/main.cc: make this compile again base/random.cc: base/random.hh: sim/main.cc: Get rid of the Simplescalar random number junk. Since I didn't realize that we didn't even use it until after I wrote a simple replacement, I figure I'll commit the replacement in case we ever need it. base/str.hh: sim/main.cc: quote may be more generally useful sim/main.cc: sim/sim_object.cc: sim/sim_object.hh: Make the old stats package a bit more self contained to prepare for future extrication sim/main.cc: sim/sim_time.cc: sim/sim_time.hh: consolidate all of the time handling stuff sim/base_cpu.cc: sim/base_cpu.hh: sim/main.cc: sim/smt.hh: instead of initializing max_threads_per_cpu in main(), we turn it into a static function and initialize it upon the first call Users of this should beware that all CPUs must be built before this function can be used. sim/main.cc: sim/universe.cc: sim_running_systems makes more sense in universe.cc sim/main.cc: this is not a simplescalar file, use our copyright say that the simulator is M5 and display our copyright cleanup change a few things here and there to use our style use endl instead of "\n" (for future portablility) sim/async.hh: sim/main.cc: sim/system.cc: sim/system.hh: sim/universe.cc: - Clean up a few simplescalar comments from main.cc that Nate missed. - Add some comments and some doxygen documentation. - Move sim_running_systems to static System::numSystemsRunning. arch/alpha/ev5.cc: Update num_running_systems to System::numSystemsRunning for full-sys too. sim/base_cpu.cc: sim/base_cpu.hh: sim/smt.hh: instead of polling all CPUs to find out the max number of threads across all CPUs, just have the CPUs themselves update the variable as they are created. arch/alpha/isa_desc: First pass at fixing cvtst... not tested. arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: arch/alpha/isa_desc: Just use the TYPEFUNC not FULLFUNC arch/alpha/ev5.cc: base/statistics.cc: base/statistics.hh: committing from the wrong directory is a bad thing arch/alpha/isa_desc: I hope a final solution for the cmptxx issue. base/statistics.cc: All printable stats must first be initialized, so throw an assertion if they are not. This ought to help in debugging a bit. base/statistics.cc: base/statistics.hh: Two new flags: nozero, and nonan. This will supress printing stats if they are zero or NAN. For example, it will cause vector elements to be skipped if there is no value, or it will cause distribution buckets to be skipped. (or an entire scalar stat to be skipped.) This can be used in conjunction with prereq. The difference with prereq, is that prereq just checks if the other stat has ANY values, and won't selectively ignore individual vector elements. base/statistics.hh: this does not belong here arch/alpha/isa_desc: Just happened to notice small insidious bug in itofs. arch/isa_parser.py: New isa description language feature: multiple constants can be provided for a decode statement, e.g.: decode OP { 0, 1: foo(); 2, 3: bar(); } Documentation update included at no extra charge. sim/param.hh: this can be const sim/exec_context.cc: be more terse arch/alpha/isa_desc: Revamp decoding of IEEE FP instructions (opcode 0x16). I think we've got all the bases covered now. Also implemented cvtql/v & cvtql/sv (actually the same instruction from M5's perspective). arch/isa_parser.py: - If isa_desc defines the global Python variable rcs_id, echo it into the output decoder.cc. - Only print last three components of ISA description path name in output. - Add RCS id string to this file. arch/alpha/isa_desc: Add RCS id string. arch/isa_parser.py: Get it right. arch/isa_parser.py: Oone more little glitch... kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: add support for mach syscalls. base/trace.cc: base/trace.hh: Some reorganization and cleanup. Add the ability to ignore trace output from certain sources. The option is --trace:ignore. It takes a space separated list of SimObjects to ignore. The SimObject is listed in the normal dotted herarchy notation. (e.g. system0.cpu0.DL1) If an object is specified, the *all* child objects are ignored as well. You can use a wildcard (*) to match any object. To ignore all trace statements from system1: --trace:ignore"system1" To ignore all DL1 statements: --trace:ignore="*.*.DL1" sim/main.cc: Try the HOST varilable if HOSTNAME isn't found sim/exetrace.cc: sim/exetrace.hh: Minor tweeks to instruction execution tracing: - add a correct-path sequence number to all instructions - add colon characters to help delimit the instruction disassembly arch/alpha/ev5.cc: Move all of the kernel statistics into the .cc file while I am still messing around with them. Add support for tracking context switches, and mode switches. More detailed tracking of ipl changes. Don't display zeroes for stats such as syscalls, ipls, faults, since zeroes are very common and there are a ton of stats. base/hashmap.hh: don't forget about the hash_multimap oh, and string is used in here base/str.cc: convert strings that represent bool values to a bool arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/ev5.cc: rework the tlb lookup code so that it uses a map instead of a linear search. base/statistics.cc: a tiny bit of debugging assistance arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: sim/exec_context.hh: No need for these functions to be virtual. Given that, they don't need to have the same interface. This eliminates a useless check in an expensive function. arch/alpha/isa_desc: This is an quick fix for the SimpleSclar-FP-Ops-Don't-Work-Right bug The SS_COMPATIBLE_FP #define at the top of the file forces the precision to match SS. This will change the precision for ALL CPU's. Nate will be making a change shortly so that this not done for Full System arch/alpha/alpha_memory.cc: use i-> instead of (*i). (what was I thinking?) also try to do i-> only once if it can be helped. base/remote_gdb.cc: sim/simple_cpu.cc: Move remote debugger code to where it belongs clean it up a tad while we're at it. arch/alpha/isa_desc: Changes for the SS FP bug: SS-style FP done only if SS_COMPATIBLE_FP is defined in the makefile arch/alpha/isa_traits.hh: sim/memtest.cc: sim/memtest.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: The new memory hierarchy. There is still some more changes to come, but this works now. IIC compression is broken, but no one else cares. DMA coherence might be broken (no way to test atm). There are doxygen warnings that I will clear up when I can stay connected for more than 3 minutes. Doxyfile: Turn Graphics back on since we have squashed the warnings. base/misc.hh: Add #include <assert.h> for those who use m5_assert() macro. Somehow g++ 3.3 is pickier about this than 3.2. sim/exetrace.hh: sim/simple_cpu.cc: sim/std_types.hh: Style fixes... mostly changing 'struct foo_bar' to 'FooBar' for some older parts of the code. Doxyfile: Always have a detailed section. sim/host.hh: Get rid of an old simplescalar comment (plus improve some other comments). base/statistics.cc: base/statistics.hh: provide a way to get at the subdesc base/statistics.hh: Make it possible to counte a sample more than once base/statistics.cc: print the right value base/statistics.cc: base/statistics.hh: A bit of debugging support base/statistics.cc: base/statistics.hh: be more consistent base/statistics.hh: use the correct axis base/statistics.hh: remove dead code sim/main.cc: sim/param.cc: sim/param.hh: sim/sim_object.cc: Stats now sent by default to a file called "m5.stats". Get the old behavior back by saying "--stats:file=cerr" on cmd line. Parameters and config-file stuff also sent to stats file where they belong. A few informational messages are sent to both cerr and to the stats file. Default output is pretty minimal now. arch/alpha/faults.cc: base/bitfield.hh: base/random.cc: base/random.hh: sim/static_inst.cc: test/stattest.cc: Fix RCS Id strings. sim/base_cpu.hh: sim/main.cc: Check if user forgot to specify any CPUs and print a meaningful error message (not just "improperly exited event loop!"). base/statistics.cc: base/statistics.hh: Make subsequent calls to flags() add more flags instead of change them. Also add the concept of a reserved flag that the user is not allowed to set. (Basically for passing around extra parameters in the stats package.) sim/debug.cc: sim/param.cc: sim/param.hh: sim/prog.cc: sim/sim_events.cc: Check that VectorParam objects are valid before we let them be referenced. Fix up a few places where we were just referencing them w/o checking. Also some const cleanup on Param object methods. sim/sim_object.cc: sim/sim_object.hh: Print SimObject class name when complaining about missing/broekn params. base/inifile.cc: Add "-undef" to cpp flags to not define system-specific macros. (A '#define linux 1' was giving me trouble.) base/statistics.hh: add support fo subnaming in the y direction for 2d vectors. make the printing of it pretty and compatible with the old style. also, suppress printing of a total for 2d vector if they x dimension is just 1. base/statistics.cc: rework a lot of the stuff between #ifdef STAT_DISPLAY_COMPAT so it's neater and also more accurate. add support for printing subdescriptions. LICENSE: arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/arguments.cc: arch/alpha/arguments.hh: arch/alpha/fake_syscall.cc: arch/alpha/faults.cc: arch/alpha/faults.hh: arch/alpha/isa_traits.hh: arch/alpha/osfpal.cc: arch/alpha/osfpal.hh: arch/alpha/vtophys.cc: arch/alpha/vtophys.hh: base/bitfield.hh: base/callback.hh: base/circlebuf.cc: base/circlebuf.hh: base/cprintf.cc: base/cprintf.hh: base/cprintf_formats.hh: base/date.cc: base/dbl_list.hh: base/endian.hh: base/fast_alloc.cc: base/fast_alloc.hh: base/fifo_buffer.cc: base/fifo_buffer.hh: base/hashmap.hh: base/inet.cc: base/inet.hh: base/inifile.cc: base/inifile.hh: base/intmath.cc: base/misc.cc: base/misc.hh: base/mod_num.hh: base/object_file.cc: base/object_file.hh: base/pollevent.cc: base/pollevent.hh: base/random.cc: base/random.hh: base/range.hh: base/refcnt.hh: base/remote_gdb.hh: base/res_list.hh: base/sched_list.hh: base/socket.cc: base/socket.hh: base/statistics.cc: base/statistics.hh: base/str.cc: base/str.hh: base/symtab.cc: base/symtab.hh: base/trace.cc: base/trace.hh: dev/alpha_console.cc: dev/alpha_console.hh: dev/disk_image.cc: dev/disk_image.hh: dev/etherbus.cc: dev/etherbus.hh: dev/etherdump.cc: dev/etherdump.hh: dev/etherint.cc: dev/etherint.hh: dev/etherlink.cc: dev/etherlink.hh: dev/etherpkt.hh: dev/ethertap.cc: dev/ethertap.hh: dev/simple_disk.cc: dev/simple_disk.hh: kern/tru64/tru64.hh: kern/tru64/tru64_syscalls.cc: kern/tru64/tru64_syscalls.hh: sim/async.hh: sim/base_cpu.cc: sim/base_cpu.hh: sim/debug.cc: sim/debug.hh: sim/eventq.cc: sim/eventq.hh: sim/exec_context.cc: sim/exec_context.hh: sim/exetrace.cc: sim/exetrace.hh: sim/host.hh: sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/intr_control.cc: sim/intr_control.hh: sim/main.cc: sim/memtest.cc: sim/memtest.hh: sim/op_class.hh: sim/param.cc: sim/param.hh: sim/pc_event.cc: sim/pc_event.hh: sim/predictor.hh: sim/prog.cc: sim/prog.hh: sim/sat_counter.cc: sim/sat_counter.hh: sim/serialize.cc: sim/serialize.hh: sim/sim_events.cc: sim/sim_events.hh: sim/sim_exit.hh: sim/sim_object.cc: sim/sim_object.hh: sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: sim/cache/null_compression.hh: sim/sim_time.cc: sim/sim_time.hh: sim/simple_cpu.cc: sim/simple_cpu.hh: sim/smt.hh: sim/static_inst.cc: sim/static_inst.hh: sim/std_types.hh: sim/system.cc: sim/system.hh: sim/universe.cc: test/bitvectest.cc: test/circletest.cc: test/cprintftest.cc: test/initest.cc: test/lru_test.cc: test/nmtest.cc: test/offtest.cc: test/paramtest.cc: test/rangetest.cc: test/sized_test.cc: test/stattest.cc: test/strnumtest.cc: test/symtest.cc: test/tokentest.cc: util/tap/tap.cc: arch/isa_parser.py: Add attribution to license. sim/cache/lzss_compression.cc: sim/cache/lzss_compression.hh: Extend the compression algorithm to handle upto 4096 byte blocks. Improve compression of single bytes that can be sign extended. sim/cache/lzss_compression.hh: Remove some todos that I've already done. sim/hybrid_pred.cc: sim/hybrid_pred.hh: sim/memtest.cc: sim/prog.cc: sim/sat_counter.cc: sim/memtest.hh: sim/predictor.hh: sim/prog.hh: sim/sat_counter.hh: the new stats package. voila. the move to bitkeeper can go on, figuring what's happening can happen later. base/trace.cc: test/Makefile: test/cprintftest.cc: test/tracetest.cc: separate the context stuff for tracing from the actual tracing facility to make it easier to test. Add a test for tracing --HG-- extra : convert_revision : 28dd3568b0714296345f8a5cba282f0b937ce725
2003-10-07 16:41:54 +02:00
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
# generate a legend page explaining the meaning of the various boxes and
# arrows in the dot generated graphs.
GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
# remove the intermediate dot files that are used to generate
# the various graphs.
DOT_CLEANUP = YES