gem5.git
15 years agoMem: Fill out the comment that describes the LOCKED request flag.
Gabe Black [Mon, 20 Apr 2009 05:00:24 +0000 (22:00 -0700)]
Mem: Fill out the comment that describes the LOCKED request flag.

15 years agoMem: Change isLlsc to isLLSC.
Gabe Black [Mon, 20 Apr 2009 04:44:15 +0000 (21:44 -0700)]
Mem: Change isLlsc to isLLSC.

15 years agoX86: Fix the functions that manipulate large bit arrays in the local APIC.
Gabe Black [Sun, 19 Apr 2009 20:47:15 +0000 (13:47 -0700)]
X86: Fix the functions that manipulate large bit arrays in the local APIC.

15 years agoX86: Fix up a copyright.
Gabe Black [Sun, 19 Apr 2009 20:17:35 +0000 (13:17 -0700)]
X86: Fix up a copyright.

15 years agoX86: Fix how the TLB handles the storecheck flag.
Gabe Black [Sun, 19 Apr 2009 11:57:51 +0000 (04:57 -0700)]
X86: Fix how the TLB handles the storecheck flag.

15 years agoX86: Recognize and handle the lock legacy prefix.
Gabe Black [Sun, 19 Apr 2009 11:57:28 +0000 (04:57 -0700)]
X86: Recognize and handle the lock legacy prefix.

15 years agoX86: Implement a locking version of XADD.
Gabe Black [Sun, 19 Apr 2009 11:56:49 +0000 (04:56 -0700)]
X86: Implement a locking version of XADD.

15 years agoX86: Implement a locking version of BTC.
Gabe Black [Sun, 19 Apr 2009 11:56:45 +0000 (04:56 -0700)]
X86: Implement a locking version of BTC.

15 years agoX86: Implement a locking version of BTR.
Gabe Black [Sun, 19 Apr 2009 11:56:43 +0000 (04:56 -0700)]
X86: Implement a locking version of BTR.

15 years agoX86: Implement a locking version of CMPXCHG.
Gabe Black [Sun, 19 Apr 2009 11:56:40 +0000 (04:56 -0700)]
X86: Implement a locking version of CMPXCHG.

15 years agoX86: Implement a locking version of BTS.
Gabe Black [Sun, 19 Apr 2009 11:56:36 +0000 (04:56 -0700)]
X86: Implement a locking version of BTS.

15 years agoX86: Implement a locking version of DEC.
Gabe Black [Sun, 19 Apr 2009 11:56:34 +0000 (04:56 -0700)]
X86: Implement a locking version of DEC.

15 years agoX86: Implement a locking version of INC.
Gabe Black [Sun, 19 Apr 2009 11:56:31 +0000 (04:56 -0700)]
X86: Implement a locking version of INC.

15 years agoX86: Implement a locking version of NEG.
Gabe Black [Sun, 19 Apr 2009 11:56:28 +0000 (04:56 -0700)]
X86: Implement a locking version of NEG.

15 years agoX86: Implement a locking version of NOT.
Gabe Black [Sun, 19 Apr 2009 11:56:25 +0000 (04:56 -0700)]
X86: Implement a locking version of NOT.

15 years agoX86: Implement a locking version of XCHG.
Gabe Black [Sun, 19 Apr 2009 11:56:22 +0000 (04:56 -0700)]
X86: Implement a locking version of XCHG.

15 years agoX86: Implement a locking version of XOR.
Gabe Black [Sun, 19 Apr 2009 11:56:20 +0000 (04:56 -0700)]
X86: Implement a locking version of XOR.

15 years agoX86: Implement a locking version of SUB.
Gabe Black [Sun, 19 Apr 2009 11:56:16 +0000 (04:56 -0700)]
X86: Implement a locking version of SUB.

15 years agoX86: Implement a locking version of AND.
Gabe Black [Sun, 19 Apr 2009 11:56:14 +0000 (04:56 -0700)]
X86: Implement a locking version of AND.

15 years agoX86: Implement a locking version of SBB.
Gabe Black [Sun, 19 Apr 2009 11:56:11 +0000 (04:56 -0700)]
X86: Implement a locking version of SBB.

15 years agoX86: Implement a locking version of ADC.
Gabe Black [Sun, 19 Apr 2009 11:56:08 +0000 (04:56 -0700)]
X86: Implement a locking version of ADC.

15 years agoX86: Implement a locking version of OR.
Gabe Black [Sun, 19 Apr 2009 11:56:06 +0000 (04:56 -0700)]
X86: Implement a locking version of OR.

15 years agoX86: Implement a locking version of ADD.
Gabe Black [Sun, 19 Apr 2009 11:56:02 +0000 (04:56 -0700)]
X86: Implement a locking version of ADD.

15 years agoX86: Implement the stul microop.
Gabe Black [Sun, 19 Apr 2009 11:55:58 +0000 (04:55 -0700)]
X86: Implement the stul microop.
This microop does a store and unlocks the requested address. The RISC86
microop ISA doesn't seem to have an equivalent to this, so I'm guessing that
the store following an ldstl is automatically unlocking. We don't do it this
way for performance reasons since the behavior is the same.

15 years agoX86: Implement the ldstl microop.
Gabe Black [Sun, 19 Apr 2009 11:55:43 +0000 (04:55 -0700)]
X86: Implement the ldstl microop.
This microop does a load, checks that a store would succeed, and locks the
requested address.

15 years agoCPUs: Make the atomic CPU support locked memory accesses.
Gabe Black [Sun, 19 Apr 2009 11:50:07 +0000 (04:50 -0700)]
CPUs: Make the atomic CPU support locked memory accesses.

15 years agoMemory: Add a LOCKED flag back in for x86 style locking.
Gabe Black [Sun, 19 Apr 2009 11:39:25 +0000 (04:39 -0700)]
Memory: Add a LOCKED flag back in for x86 style locking.

15 years agoMemory: Rename LOCKED for load locked store conditional to LLSC.
Gabe Black [Sun, 19 Apr 2009 11:25:01 +0000 (04:25 -0700)]
Memory: Rename LOCKED for load locked store conditional to LLSC.

15 years agoSE mode: Make keeping track of the number of syscalls less hacky.
Gabe Black [Sun, 19 Apr 2009 11:15:32 +0000 (04:15 -0700)]
SE mode: Make keeping track of the number of syscalls less hacky.

15 years agoX86: Actually put the PCI INTA entry into the MP tables.
Gabe Black [Sun, 19 Apr 2009 11:15:18 +0000 (04:15 -0700)]
X86: Actually put the PCI INTA entry into the MP tables.

15 years agoX86: Mask the PIC at startup to avoid a glitch which causes an NMI.
Gabe Black [Sun, 19 Apr 2009 11:15:06 +0000 (04:15 -0700)]
X86: Mask the PIC at startup to avoid a glitch which causes an NMI.

15 years agoX86: Make E820 report nice, round (and correct) numbers.
Gabe Black [Sun, 19 Apr 2009 11:14:48 +0000 (04:14 -0700)]
X86: Make E820 report nice, round (and correct) numbers.

15 years agoX86: Actually handle 16 bit mode modrm.
Gabe Black [Sun, 19 Apr 2009 11:14:31 +0000 (04:14 -0700)]
X86: Actually handle 16 bit mode modrm.

15 years agoX86: Make the TEST instruction set all the flags it's supposed to.
Gabe Black [Sun, 19 Apr 2009 11:14:16 +0000 (04:14 -0700)]
X86: Make the TEST instruction set all the flags it's supposed to.

15 years agoX86: Implement broadcast IPIs.
Gabe Black [Sun, 19 Apr 2009 11:14:01 +0000 (04:14 -0700)]
X86: Implement broadcast IPIs.

15 years agoX86: Fix the ordering of the vendor string reported by CPUID.
Gabe Black [Sun, 19 Apr 2009 11:13:45 +0000 (04:13 -0700)]
X86: Fix the ordering of the vendor string reported by CPUID.

15 years agoX86: Keep track of what the initial count value was in the LAPIC timer.
Gabe Black [Sun, 19 Apr 2009 10:56:57 +0000 (03:56 -0700)]
X86: Keep track of what the initial count value was in the LAPIC timer.

15 years agoX86: Only recognize the first startup IPI after INIT or reset.
Gabe Black [Sun, 19 Apr 2009 10:56:36 +0000 (03:56 -0700)]
X86: Only recognize the first startup IPI after INIT or reset.

15 years agoX86: Use recvResponse to implement the idle bit in the Local APIC ICR.
Gabe Black [Sun, 19 Apr 2009 10:56:24 +0000 (03:56 -0700)]
X86: Use recvResponse to implement the idle bit in the Local APIC ICR.

15 years agoX86: Add a function which gets called when an interrupt message has been delivered.
Gabe Black [Sun, 19 Apr 2009 10:54:11 +0000 (03:54 -0700)]
X86: Add a function which gets called when an interrupt message has been delivered.

15 years agoX86: Fix the flags for interrupt response messages.
Gabe Black [Sun, 19 Apr 2009 10:53:29 +0000 (03:53 -0700)]
X86: Fix the flags for interrupt response messages.

15 years agoX86: Explicitly use the right width in a few places that need a 64 bit value.
Gabe Black [Sun, 19 Apr 2009 10:47:59 +0000 (03:47 -0700)]
X86: Explicitly use the right width in a few places that need a 64 bit value.

15 years agoX86: Keep track of the pioAddr for the local APIC.
Gabe Black [Sun, 19 Apr 2009 10:47:12 +0000 (03:47 -0700)]
X86: Keep track of the pioAddr for the local APIC.

15 years agoX86: Implement far jmp.
Gabe Black [Sun, 19 Apr 2009 10:42:41 +0000 (03:42 -0700)]
X86: Implement far jmp.

15 years agoX86: Some segment selectors can be used when "NULL".
Gabe Black [Sun, 19 Apr 2009 10:41:10 +0000 (03:41 -0700)]
X86: Some segment selectors can be used when "NULL".

15 years agoX86: Fix a bug in the chks microop where it ignored that it found a fault.
Gabe Black [Sun, 19 Apr 2009 10:40:08 +0000 (03:40 -0700)]
X86: Fix a bug in the chks microop where it ignored that it found a fault.

15 years agoX86: Make the interrupt entering microcode record the value to use, not actually...
Gabe Black [Sun, 19 Apr 2009 10:36:57 +0000 (03:36 -0700)]
X86: Make the interrupt entering microcode record the value to use, not actually use it.

15 years agoX86: LEA calculates an address before segmentation.
Gabe Black [Sun, 19 Apr 2009 10:24:51 +0000 (03:24 -0700)]
X86: LEA calculates an address before segmentation.

15 years agoX86: Implement the save machine status word instruction (SMSW).
Gabe Black [Sun, 19 Apr 2009 10:22:38 +0000 (03:22 -0700)]
X86: Implement the save machine status word instruction (SMSW).

15 years agoX86: Implement the load machine status word instruction (LMSW).
Gabe Black [Sun, 19 Apr 2009 10:17:14 +0000 (03:17 -0700)]
X86: Implement the load machine status word instruction (LMSW).

15 years agoX86: Update the stats for the fix for CPUID.
Gabe Black [Sun, 19 Apr 2009 10:14:33 +0000 (03:14 -0700)]
X86: Update the stats for the fix for CPUID.

15 years agoX86: Only use %eax to select a function and look like we support sse2.
Gabe Black [Sun, 19 Apr 2009 10:11:24 +0000 (03:11 -0700)]
X86: Only use %eax to select a function and look like we support sse2.

15 years agoX86: Fix the mov to segment selector in real mode instruction microcode.
Gabe Black [Sun, 19 Apr 2009 10:08:40 +0000 (03:08 -0700)]
X86: Fix the mov to segment selector in real mode instruction microcode.

15 years agoX86: The startup IPI delivery mode is not reserved.
Gabe Black [Sun, 19 Apr 2009 10:01:46 +0000 (03:01 -0700)]
X86: The startup IPI delivery mode is not reserved.

15 years agoX86: Implement the STARTUP IPI.
Gabe Black [Sun, 19 Apr 2009 09:56:03 +0000 (02:56 -0700)]
X86: Implement the STARTUP IPI.

15 years agoX86: Implement the INIT IPI.
Gabe Black [Sun, 19 Apr 2009 09:53:00 +0000 (02:53 -0700)]
X86: Implement the INIT IPI.

15 years agoX86: Fix the halt microop.
Gabe Black [Sun, 19 Apr 2009 09:51:09 +0000 (02:51 -0700)]
X86: Fix the halt microop.

15 years agoX86: Start implementing the interrupt command register in the local APIC.
Gabe Black [Sun, 19 Apr 2009 09:43:22 +0000 (02:43 -0700)]
X86: Start implementing the interrupt command register in the local APIC.

15 years agoX86: Make code that sends an interrupt from the IO APIC available for IPIs.
Gabe Black [Sun, 19 Apr 2009 09:42:19 +0000 (02:42 -0700)]
X86: Make code that sends an interrupt from the IO APIC available for IPIs.

15 years agoX86: Automatically make the IO APIC in an N CPU system have id N+1.
Gabe Black [Sun, 19 Apr 2009 09:39:19 +0000 (02:39 -0700)]
X86: Automatically make the IO APIC in an N CPU system have id N+1.

15 years agoCPU: If the simple CPU is already idle, just return from suspendContext, don't assert.
Gabe Black [Sun, 19 Apr 2009 09:23:29 +0000 (02:23 -0700)]
CPU: If the simple CPU is already idle, just return from suspendContext, don't assert.

15 years agoX86: Condense the startupCPU code.
Gabe Black [Sun, 19 Apr 2009 09:20:57 +0000 (02:20 -0700)]
X86: Condense the startupCPU code.

15 years agoX86: Set the local APIC ID to something meaningful.
Gabe Black [Sun, 19 Apr 2009 09:16:49 +0000 (02:16 -0700)]
X86: Set the local APIC ID to something meaningful.

15 years agoX86: Don't pretend to be an AMD CPU any more. We're not good enough at it.
Gabe Black [Sun, 19 Apr 2009 09:06:51 +0000 (02:06 -0700)]
X86: Don't pretend to be an AMD CPU any more. We're not good enough at it.

15 years agoo3-mips-regress: add hello word regression.
Korey Sewell [Sat, 18 Apr 2009 14:42:29 +0000 (10:42 -0400)]
o3-mips-regress: add hello word regression.

15 years agomips-tlb-fix: check for alignment faults.\nMIPS was never updated to use TLBS correct...
Korey Sewell [Sat, 18 Apr 2009 14:42:29 +0000 (10:42 -0400)]
mips-tlb-fix: check for alignment faults.\nMIPS was never updated to use TLBS correcty in SE mode. The error was forwarding translations directly to pageTable. The TLB should check for alignment faults at bare minimum here but in the long run we should be using TLBs in SE mode for MIPS.

15 years agomips-syscall: mark with correct flag. \nMIPS was using wrong serialization flag on...
Korey Sewell [Sat, 18 Apr 2009 14:42:29 +0000 (10:42 -0400)]
mips-syscall: mark with correct flag. \nMIPS was using wrong serialization flag on syscall instructions allowing O3 to handle SE mode syscalls incorrectly and speculate on instructions after a syscall

15 years agoo3-delay-slot-bpred: fix decode stage handling of uncdtl. branches.\n decode stage...
Korey Sewell [Sat, 18 Apr 2009 14:42:29 +0000 (10:42 -0400)]
o3-delay-slot-bpred: fix decode stage handling of uncdtl. branches.\n decode stage was not setting the predicted PC correctly or passing that information back to fetch correctly

15 years agomips-shadowsets: fix calcuations. \n Remove Shadowsets from Int & Arch. Reg Calculations
Korey Sewell [Sat, 18 Apr 2009 14:42:28 +0000 (10:42 -0400)]
mips-shadowsets: fix calcuations. \n  Remove Shadowsets from Int & Arch. Reg Calculations

15 years agoo3, inorder: fix FS bug due to initializing ThreadState to Halted.
Steve Reinhardt [Fri, 17 Apr 2009 23:54:58 +0000 (16:54 -0700)]
o3, inorder: fix FS bug due to initializing ThreadState to Halted.
For some reason o3 FS init() only called initCPU if the thread state
was Suspended, which was no longer the case.  There's no apparent
reason to check, so I whacked the test completely rather than
changing the check to Halted.
The inorder init() was also updated to be symmetric, though the
previous code was just a fancy no-op.

15 years agoo3: handle fetch with no active threads correctly.
Steve Reinhardt [Thu, 16 Apr 2009 06:12:00 +0000 (23:12 -0700)]
o3: handle fetch with no active threads correctly.
This situation can arise now on the first fetch cycle after
the last active thread is halted.  It seems easy enough to
deal with when it happens rather than trying to avoid it.

15 years agoo3: fix {read,set}ArchFloatReg* functions.
Steve Reinhardt [Thu, 16 Apr 2009 06:10:43 +0000 (23:10 -0700)]
o3: fix {read,set}ArchFloatReg* functions.
Register indices were not being calculated properly.

15 years agoThreadState: initialize status to Halted in constructor.
Steve Reinhardt [Wed, 15 Apr 2009 20:18:24 +0000 (13:18 -0700)]
ThreadState: initialize status to Halted in constructor.
This provides a common initial status for all threads independent
of CPU model (unlike the prior situation where CPUs initialized
threads to inconsistent states).
This mostly matters for SE mode; in FS mode, ISA-specific startupCPU()
methods generally handle boot-time initialization of thread contexts
(since the right thing to do is ISA-dependent).

15 years agoUpdate stats after elimination of Unallocated state.
Steve Reinhardt [Wed, 15 Apr 2009 20:13:58 +0000 (13:13 -0700)]
Update stats after elimination of Unallocated state.
Somehow ending threads with halt() instead of deallocate()
reduces the squash count on o3 by 1 (and a few other
similarly trivial changes).

15 years agoGet rid of the Unallocated thread context state.
Steve Reinhardt [Wed, 15 Apr 2009 20:13:47 +0000 (13:13 -0700)]
Get rid of the Unallocated thread context state.
Basically merge it in with Halted.
Also had to get rid of a few other functions that
called ThreadContext::deallocate(), including:
 - InOrderCPU's setThreadRescheduleCondition.
 - ThreadContext::exit().  This function was there to avoid terminating
   simulation when one thread out of a multi-thread workload exits, but we
   need to find a better (non-cpu-centric) way.

15 years agoconfigs: Allow M5_CPU2000 env var to set CPU2K binary path.
Steve Reinhardt [Wed, 15 Apr 2009 19:52:31 +0000 (12:52 -0700)]
configs: Allow M5_CPU2000 env var to set CPU2K binary path.
It would be nice to have a more comprehensive mechanism
but this is a big improvement over manually editing the script.

15 years agoX86: Fix minor bug in the page table walker from TLB shuffling.
Gabe Black [Mon, 13 Apr 2009 11:14:15 +0000 (04:14 -0700)]
X86: Fix minor bug in the page table walker from TLB shuffling.

15 years agostats: disallow duplicate statistic names.
Nathan Binkert [Thu, 9 Apr 2009 05:22:50 +0000 (22:22 -0700)]
stats: disallow duplicate statistic names.

15 years agoalpha: get rid of all turbolaser remnants
Nathan Binkert [Thu, 9 Apr 2009 05:22:49 +0000 (22:22 -0700)]
alpha: get rid of all turbolaser remnants

15 years agotests: update tests for TLB unification
Nathan Binkert [Thu, 9 Apr 2009 05:21:30 +0000 (22:21 -0700)]
tests: update tests for TLB unification

15 years agotlb: More fixing of unified TLB
Nathan Binkert [Thu, 9 Apr 2009 05:21:27 +0000 (22:21 -0700)]
tlb: More fixing of unified TLB

15 years agotlb: Don't separate the TLB classes into an instruction TLB and a data TLB
Gabe Black [Thu, 9 Apr 2009 05:21:27 +0000 (22:21 -0700)]
tlb: Don't separate the TLB classes into an instruction TLB and a data TLB

15 years agostyle: fix style hook for some newer versions of mercurial.
Nathan Binkert [Thu, 9 Apr 2009 05:21:25 +0000 (22:21 -0700)]
style: fix style hook for some newer versions of mercurial.

15 years agoMerge ARM into the head. ARM will compile but may not actually work.
Gabe Black [Mon, 6 Apr 2009 17:19:36 +0000 (10:19 -0700)]
Merge ARM into the head. ARM will compile but may not actually work.

15 years agoarm: add ARM support to M5
Stephen Hines [Mon, 6 Apr 2009 01:53:15 +0000 (18:53 -0700)]
arm: add ARM support to M5

15 years agoCPA: Fix a typo that managed to sneak in.
Ali Saidi [Thu, 26 Mar 2009 00:06:54 +0000 (20:06 -0400)]
CPA: Fix a typo that managed to sneak in.

15 years agoincludes: add ext to the includes path.
Nathan Binkert [Tue, 17 Mar 2009 19:49:03 +0000 (12:49 -0700)]
includes: add ext to the includes path.
move dnet to the correct place so that we use this

--HG--
rename : ext/dnet/dnet/addr.h => ext/dnet/addr.h
rename : ext/dnet/dnet/arp.h => ext/dnet/arp.h
rename : ext/dnet/dnet/blob.h => ext/dnet/blob.h
rename : ext/dnet/dnet/eth.h => ext/dnet/eth.h
rename : ext/dnet/dnet/fw.h => ext/dnet/fw.h
rename : ext/dnet/dnet/icmp.h => ext/dnet/icmp.h
rename : ext/dnet/dnet/intf.h => ext/dnet/intf.h
rename : ext/dnet/dnet/ip.h => ext/dnet/ip.h
rename : ext/dnet/dnet/ip6.h => ext/dnet/ip6.h
rename : ext/dnet/dnet/os.h => ext/dnet/os.h
rename : ext/dnet/dnet/rand.h => ext/dnet/rand.h
rename : ext/dnet/dnet/route.h => ext/dnet/route.h
rename : ext/dnet/dnet/tcp.h => ext/dnet/tcp.h
rename : ext/dnet/dnet/udp.h => ext/dnet/udp.h

15 years agoply: put the absolute path to ply in the environment, not a relative one
Nathan Binkert [Tue, 17 Mar 2009 19:45:41 +0000 (12:45 -0700)]
ply: put the absolute path to ply in the environment, not a relative one

15 years agostats: fix compiler error
Nathan Binkert [Mon, 16 Mar 2009 22:16:58 +0000 (15:16 -0700)]
stats: fix compiler error

15 years agoVery minor regression stats updates due top previous changeset.
Steve Reinhardt [Mon, 16 Mar 2009 15:01:23 +0000 (11:01 -0400)]
Very minor regression stats updates due top previous changeset.
Setting dirty bit on swaps added a handful of writebacks in a
few of the longer-running SPARC_SE benchmarks.

15 years agocache: set dirty bit on swaps (oops!)
Steve Reinhardt [Thu, 12 Mar 2009 06:05:26 +0000 (23:05 -0700)]
cache: set dirty bit on swaps (oops!)

15 years agocpu: fix minor endian issue with trace output
Steve Reinhardt [Thu, 12 Mar 2009 06:05:24 +0000 (23:05 -0700)]
cpu: fix minor endian issue with trace output
(no functional change)

15 years agotests: use env.Execute instead of Execute to pick up env vars.
Steve Reinhardt [Wed, 11 Mar 2009 17:54:42 +0000 (10:54 -0700)]
tests: use env.Execute instead of Execute to pick up env vars.

15 years agoprefetch: don't panic on requests w/o contextID (e.g., writebacks).
Steve Reinhardt [Wed, 11 Mar 2009 00:37:15 +0000 (17:37 -0700)]
prefetch: don't panic on requests w/o contextID (e.g., writebacks).

15 years agobuild: fix compiler warnings in g++ 3.4
Nathan Binkert [Sun, 8 Mar 2009 05:34:50 +0000 (21:34 -0800)]
build: fix compiler warnings in g++ 3.4

15 years agoMinor tweak to regression exit status message.
Steve Reinhardt [Sun, 8 Mar 2009 01:24:13 +0000 (17:24 -0800)]
Minor tweak to regression exit status message.

15 years agoFix up regression execution to better handle tests that end abnormally.
Steve Reinhardt [Sun, 8 Mar 2009 00:58:51 +0000 (16:58 -0800)]
Fix up regression execution to better handle tests that end abnormally.
E.g., mark aborts due to assertion failures as failed tests,
but those that get killed by the user as needing to be rerun, etc.

15 years agotests: update tests because of changes in stat names and in the stats package
Nathan Binkert [Sat, 7 Mar 2009 22:30:55 +0000 (14:30 -0800)]
tests: update tests because of changes in stat names and in the stats package

15 years agostats: fix duplicate statistics names.
Nathan Binkert [Sat, 7 Mar 2009 22:30:54 +0000 (14:30 -0800)]
stats: fix duplicate statistics names.
This generally requires providing a more meaningful name() function for a
class.

15 years agostats: cleanup text output stuff and fix mysql output
Nathan Binkert [Sat, 7 Mar 2009 22:30:53 +0000 (14:30 -0800)]
stats: cleanup text output stuff and fix mysql output