riscv-isa-sim.git
8 years agoimplement PUM functionality
Andrew Waterman [Fri, 19 Feb 2016 21:06:57 +0000 (13:06 -0800)]
implement PUM functionality

8 years agosptbr now a holds a PPN, not an address
Andrew Waterman [Fri, 19 Feb 2016 21:05:50 +0000 (13:05 -0800)]
sptbr now a holds a PPN, not an address

8 years agoReturn to interactive mode after a trap
Andrew Waterman [Fri, 12 Feb 2016 18:59:46 +0000 (10:59 -0800)]
Return to interactive mode after a trap

8 years agoUse simpler MTVEC scheme
Andrew Waterman [Fri, 12 Feb 2016 18:59:34 +0000 (10:59 -0800)]
Use simpler MTVEC scheme

8 years agoFix ERET bug
Andrew Waterman [Fri, 12 Feb 2016 18:58:43 +0000 (10:58 -0800)]
Fix ERET bug

8 years agoZero-extend all CSR writes
Andrew Waterman [Tue, 9 Feb 2016 22:26:06 +0000 (14:26 -0800)]
Zero-extend all CSR writes

This fixes an RV32 HTIF issue.

8 years agoFix ERET serialization strategy
Andrew Waterman [Tue, 9 Feb 2016 07:29:41 +0000 (23:29 -0800)]
Fix ERET serialization strategy

It was screwing up the commit log.

8 years agoAdd autoconf check for little-endianness
Andrew Waterman [Mon, 8 Feb 2016 01:24:59 +0000 (17:24 -0800)]
Add autoconf check for little-endianness

8 years agoSet default RV32 RAM size to 4 GiB - 256 MiB
Andrew Waterman [Mon, 8 Feb 2016 01:05:21 +0000 (17:05 -0800)]
Set default RV32 RAM size to 4 GiB - 256 MiB

This allows, by default, 256 MiB of addressable I/O space.

8 years agoSerialize simulator on ERET
Andrew Waterman [Mon, 8 Feb 2016 01:04:28 +0000 (17:04 -0800)]
Serialize simulator on ERET

This guarantees interrupts will eventually be taken.

8 years agoWIP on priv spec v1.9
Andrew Waterman [Sat, 6 Feb 2016 02:18:06 +0000 (18:18 -0800)]
WIP on priv spec v1.9

8 years agoCompile debug symbols
Andrew Waterman [Sat, 6 Feb 2016 02:17:56 +0000 (18:17 -0800)]
Compile debug symbols

8 years agoMark SoftFloat routines static inline
Andrew Waterman [Wed, 2 Mar 2016 20:13:55 +0000 (12:13 -0800)]
Mark SoftFloat routines static inline

This avoids duplicate definitions on some platforms.

8 years agoUpgrade to latest SoftFloat
Andrew Waterman [Wed, 2 Mar 2016 00:24:05 +0000 (16:24 -0800)]
Upgrade to latest SoftFloat

8 years agoActually refill ITLB on ITLB miss
Andrew Waterman [Thu, 4 Feb 2016 07:38:29 +0000 (23:38 -0800)]
Actually refill ITLB on ITLB miss

oops.

8 years agoFix NaN propagation for fcvt
Andrew Waterman [Sat, 30 Jan 2016 01:54:20 +0000 (17:54 -0800)]
Fix NaN propagation for fcvt

8 years agoRemove hwacha support
Andrew Waterman [Sun, 24 Jan 2016 08:01:04 +0000 (00:01 -0800)]
Remove hwacha support

Support for hwacha will continue on the ESP branch (see
https://github.com/ucb-bar/esp-isa-sim).

8 years agoUse new NaN discipline
Andrew Waterman [Wed, 13 Jan 2016 00:13:20 +0000 (16:13 -0800)]
Use new NaN discipline

8 years agodon't ignore data value when writing MIPI
Andrew Waterman [Wed, 13 Jan 2016 00:12:21 +0000 (16:12 -0800)]
don't ignore data value when writing MIPI

8 years agofix help message
Andrew Waterman [Tue, 5 Jan 2016 18:36:25 +0000 (10:36 -0800)]
fix help message

8 years agoanother osx clang compatability fix
Scott Beamer [Thu, 17 Dec 2015 20:27:07 +0000 (12:27 -0800)]
another osx clang compatability fix

9 years agoC.ADDIW is reserved for rd=0
Andrew Waterman [Fri, 20 Nov 2015 03:00:14 +0000 (19:00 -0800)]
C.ADDIW is reserved for rd=0

9 years agoGenerate device tree for target machine
Andrew Waterman [Fri, 13 Nov 2015 01:51:46 +0000 (17:51 -0800)]
Generate device tree for target machine

9 years agoAccess FP regs through a macro
Andrew Waterman [Thu, 29 Oct 2015 20:08:32 +0000 (13:08 -0700)]
Access FP regs through a macro

This makes it easier to hook into them.

9 years agoMerge pull request #34 from zizztux/incorrect_int_reg_count
Andrew Waterman [Thu, 5 Nov 2015 08:27:42 +0000 (00:27 -0800)]
Merge pull request #34 from zizztux/incorrect_int_reg_count

Fix incorrect upper limit for loop on interactive int register display.

9 years agoFix incorrect upper limit for loop on interactive int register display.
SeungRyeol Lee [Wed, 28 Oct 2015 06:59:10 +0000 (15:59 +0900)]
Fix incorrect upper limit for loop on interactive int register display.

9 years agoFix histogram for RVC
Andrew Waterman [Mon, 26 Oct 2015 20:07:30 +0000 (13:07 -0700)]
Fix histogram for RVC

No need to right-shift PC by 2.  It's a map, so this is a false economy.

9 years agoUpdate to hopefully final RVC 1.9 encoding
Andrew Waterman [Tue, 20 Oct 2015 22:58:13 +0000 (15:58 -0700)]
Update to hopefully final RVC 1.9 encoding

9 years agoFix --dc flag
Andrew Waterman [Tue, 13 Oct 2015 16:42:36 +0000 (09:42 -0700)]
Fix --dc flag

Resolves #33.

9 years agoRVC encoding tweak
Andrew Waterman [Tue, 6 Oct 2015 07:51:27 +0000 (00:51 -0700)]
RVC encoding tweak

9 years agomore work towards RVC 1.8
Andrew Waterman [Tue, 6 Oct 2015 04:24:01 +0000 (21:24 -0700)]
more work towards RVC 1.8

9 years agowork towards rvc 1.8
Andrew Waterman [Fri, 2 Oct 2015 19:23:24 +0000 (12:23 -0700)]
work towards rvc 1.8

9 years agoclean up shift instruction implementation
Andrew Waterman [Fri, 2 Oct 2015 18:39:09 +0000 (11:39 -0700)]
clean up shift instruction implementation

9 years agoRefactor memory access code; add MMIO support
Andrew Waterman [Fri, 25 Sep 2015 01:09:26 +0000 (18:09 -0700)]
Refactor memory access code; add MMIO support

Of course, it doesn't do anything yet.

9 years agoUse enum instead of two bools to denote memory access type
Andrew Waterman [Thu, 24 Sep 2015 21:40:40 +0000 (14:40 -0700)]
Use enum instead of two bools to denote memory access type

9 years agocommit log now correctly prints privilege
Scott Beamer [Wed, 16 Sep 2015 00:43:37 +0000 (17:43 -0700)]
commit log now correctly prints privilege

adopting convention of privilege at time of commit, not after commit

9 years agoZero-extend flw, fmv_s_x instructions
Christopher Celio [Tue, 15 Sep 2015 22:05:11 +0000 (15:05 -0700)]
Zero-extend flw, fmv_s_x instructions

   - This makes Spike more consistent with its zero-extending behavior
     regarding other SP operations when placed into the 64b f-registers.

9 years agoprint out current privilege level (if commit log enabled)
Scott Beamer [Sat, 12 Sep 2015 01:04:37 +0000 (18:04 -0700)]
print out current privilege level (if commit log enabled)

9 years agoprint out commit log (if enabled) for all privilege levels
Scott Beamer [Sat, 12 Sep 2015 01:01:11 +0000 (18:01 -0700)]
print out commit log (if enabled) for all privilege levels

9 years agoSimplify register_base_instructions
Andrew Waterman [Fri, 11 Sep 2015 22:13:52 +0000 (15:13 -0700)]
Simplify register_base_instructions

9 years agoInitialize mstatus.prv1/prv2 to U, not S
Andrew Waterman [Fri, 11 Sep 2015 22:13:26 +0000 (15:13 -0700)]
Initialize mstatus.prv1/prv2 to U, not S

This doesn't really matter, but it matches Rocket.

9 years agoSupport 'G' in ISA strings
Andrew Waterman [Fri, 11 Sep 2015 22:13:08 +0000 (15:13 -0700)]
Support 'G' in ISA strings

It's the same as IMAFD.

9 years agoMerge pull request #32 from riscv/insn-list
Andrew Waterman [Fri, 11 Sep 2015 22:05:32 +0000 (15:05 -0700)]
Merge pull request #32 from riscv/insn-list

Eliminate non-portable sed usage

9 years agoFix non-portable sed commands generating insn_list.h
Albert Ou [Fri, 11 Sep 2015 00:01:59 +0000 (17:01 -0700)]
Fix non-portable sed commands generating insn_list.h

9 years agoImprove instruction fetch
Andrew Waterman [Tue, 8 Sep 2015 22:09:23 +0000 (15:09 -0700)]
Improve instruction fetch

- Performance for variable-length instructions is much better
- Refill is simpler and faster
- Support for instructions with overlapping opcodes (e.g. C.ADD + C.JALR)

9 years agoAdd facility to instrument specific opcodes
Andrew Waterman [Tue, 8 Sep 2015 22:05:31 +0000 (15:05 -0700)]
Add facility to instrument specific opcodes

It's not ideal, because it requires modifying tracer.h.  A more general
facility would allow overriding the instruction execution function for
a given opcode dynamically.

9 years agoRefer to LICENSE in some newer source files
Andrew Waterman [Tue, 8 Sep 2015 22:03:03 +0000 (15:03 -0700)]
Refer to LICENSE in some newer source files

9 years agoMove towards RVC v1.8
Andrew Waterman [Fri, 4 Sep 2015 20:39:42 +0000 (13:39 -0700)]
Move towards RVC v1.8

9 years agoDon't automatically run autoconf
Andrew Waterman [Wed, 2 Sep 2015 20:36:10 +0000 (13:36 -0700)]
Don't automatically run autoconf

Run it yourself if you modify configure.ac, and commit the configure script.

9 years agoMerge pull request #29 from pmundkur/devel
Andrew Waterman [Thu, 6 Aug 2015 22:59:08 +0000 (15:59 -0700)]
Merge pull request #29 from pmundkur/devel

Enable execution log generation in non-interactive mode.

9 years agoAdd an option (-l) to display a log of execution in non-interactive mode.
Prashanth Mundkur [Thu, 6 Aug 2015 21:57:07 +0000 (14:57 -0700)]
Add an option (-l) to display a log of execution in non-interactive mode.

Interactive (-d) mode overrides this option when both are specified.

9 years agoAdded error message when trying to use histogram
Christopher Celio [Thu, 30 Jul 2015 20:08:46 +0000 (13:08 -0700)]
Added error message when trying to use histogram

9 years agoUpdate README.md for freg info
Christopher Celio [Tue, 21 Jul 2015 19:45:17 +0000 (12:45 -0700)]
Update README.md for freg info

9 years agoMerge pull request #28 from sbeamer/master
Andrew Waterman [Wed, 15 Jul 2015 17:57:11 +0000 (12:57 -0500)]
Merge pull request #28 from sbeamer/master

fixes clang warning (#26)

9 years agosimplified default case and added comments
Scott Beamer [Mon, 13 Jul 2015 23:17:13 +0000 (16:17 -0700)]
simplified default case and added comments

9 years agoMerge pull request #27 from sbeamer/master
Andrew Waterman [Sat, 11 Jul 2015 03:16:34 +0000 (22:16 -0500)]
Merge pull request #27 from sbeamer/master

fix clang compile error

9 years agofix clang compile error
Scott Beamer [Sat, 11 Jul 2015 02:38:22 +0000 (19:38 -0700)]
fix clang compile error

9 years agoNew machine-mode timer facility
Andrew Waterman [Sun, 5 Jul 2015 23:47:20 +0000 (16:47 -0700)]
New machine-mode timer facility

9 years agoMerge pull request #25 from vapier/master
Andrew Waterman [Sat, 6 Jun 2015 02:00:16 +0000 (19:00 -0700)]
Merge pull request #25 from vapier/master

few more interactive cleanups and more functionality

9 years agoallow interactive "reg" command to dump all registers
Mike Frysinger [Fri, 5 Jun 2015 13:17:19 +0000 (21:17 +0800)]
allow interactive "reg" command to dump all registers

It you want to scan all the registers at once (or at least a few), having
to dump them one by one is kind of a pain.  Change the behavior so that if
the register number is omitted, it'll dump all of them.

9 years agoadd an interactive "pc" command
Mike Frysinger [Fri, 5 Jun 2015 13:13:04 +0000 (21:13 +0800)]
add an interactive "pc" command

This lets you show the current pc quickly.  Sometimes when displaying
different state you can lose track of what the pc was.  Add a simple
command that plumbs in the existing functions to the user interface.

9 years agounify interactive core processing
Mike Frysinger [Fri, 5 Jun 2015 13:06:52 +0000 (21:06 +0800)]
unify interactive core processing

Different functions in here process the core argument in different ways.
Unify all of them with a utility function.

9 years agoMerge pull request #24 from vapier/master
Andrew Waterman [Thu, 4 Jun 2015 23:06:47 +0000 (16:06 -0700)]
Merge pull request #24 from vapier/master

improve interactive behavior a bit more

9 years agoadd aliases for common interactive functions
Mike Frysinger [Thu, 4 Jun 2015 16:04:52 +0000 (00:04 +0800)]
add aliases for common interactive functions

Rather than using one letter commands everywhere, add support for "run"
and "quit" and "help" as aliases to "r" and "q" and "h" respectively.
This makes it a little inconsistent when some commands are one letters
but others are full words.

9 years agoadd a help screen to interactive mode
Mike Frysinger [Thu, 4 Jun 2015 15:59:00 +0000 (23:59 +0800)]
add a help screen to interactive mode

There's no documentation that covers all the available functionality
(in source or the accompanied docs).  Start a help command so that the
info is always live and up-to-date for people.

9 years agoMerge pull request #23 from vapier/master
Andrew Waterman [Wed, 3 Jun 2015 21:00:07 +0000 (14:00 -0700)]
Merge pull request #23 from vapier/master

move interactive function init out of main loop

9 years agomove interactive function init out of main loop
Mike Frysinger [Wed, 3 Jun 2015 13:24:48 +0000 (21:24 +0800)]
move interactive function init out of main loop

These values don't change between runs, so there's no point in recreating
them on every instruction step.  Pull it out to the top to simplify.

9 years agoUse single, shared real-time counter
Andrew Waterman [Mon, 1 Jun 2015 01:28:53 +0000 (18:28 -0700)]
Use single, shared real-time counter

This required disentangling INSTRET/CYCLE from TIME.

9 years agoExecute exactly the # of insns passed to step()
Andrew Waterman [Mon, 1 Jun 2015 01:10:20 +0000 (18:10 -0700)]
Execute exactly the # of insns passed to step()

Previously, the value was treated as approximate.

9 years agoAdd rest of RV32C instructions
Andrew Waterman [Sun, 31 May 2015 23:38:24 +0000 (16:38 -0700)]
Add rest of RV32C instructions

9 years agoFix performance bug when CSR accesses are common
Andrew Waterman [Sun, 31 May 2015 22:47:11 +0000 (15:47 -0700)]
Fix performance bug when CSR accesses are common

processor_t::step was returning without doing much work, causing the HTIF
to be ticked far more often than necessary.

9 years agoFix c.slliw implementation
Andrew Waterman [Thu, 21 May 2015 18:55:52 +0000 (11:55 -0700)]
Fix c.slliw implementation

9 years agoNew RV64C proposal
Andrew Waterman [Thu, 21 May 2015 07:21:46 +0000 (00:21 -0700)]
New RV64C proposal

9 years agoTake interrupts as soon as interrupts are enabled
Andrew Waterman [Wed, 20 May 2015 20:49:01 +0000 (13:49 -0700)]
Take interrupts as soon as interrupts are enabled

Previously, if interrupts were enabled then disabled quickly enough,
no interrupt would ever be taken, resulting in deadlock.

9 years agoMerge pull request #20 from palmer-dabbelt/package
Andrew Waterman [Fri, 15 May 2015 00:35:18 +0000 (17:35 -0700)]
Merge pull request #20 from palmer-dabbelt/package

various fixes to make riscv-isa-sim installable

9 years agoFix VM, MIP encoding
Andrew Waterman [Mon, 11 May 2015 21:21:03 +0000 (14:21 -0700)]
Fix VM, MIP encoding

9 years agoInstall "disasm.h"
Palmer Dabbelt [Wed, 13 May 2015 22:36:57 +0000 (15:36 -0700)]
Install "disasm.h"

Something includes this somewhere, so I see no reason not to just
install it.

9 years agoautoreconf 126beb482ff6 ("Install pkg-config files for Spike")
Palmer Dabbelt [Wed, 13 May 2015 22:36:45 +0000 (15:36 -0700)]
autoreconf 126beb482ff6 ("Install pkg-config files for Spike")

9 years agoInstall pkg-config files for Spike
Palmer Dabbelt [Wed, 13 May 2015 21:54:24 +0000 (14:54 -0700)]
Install pkg-config files for Spike

The actual Spike package consists of a whole bunch of libraries.  This
installs a pkg-config file for each generated library, and a meta
pkg-config file (riscv-spike.pc) that links in all the other Spike
libraries except dummy_rocc (which I figure isn't interesting).

This allows me to package and install spike, and then use that package
to build an extension library (so I don't have to fork Spike for my
own ISA extension).

9 years agoChange the behavior of the DESTDIR make variable
Palmer Dabbelt [Wed, 13 May 2015 21:52:19 +0000 (14:52 -0700)]
Change the behavior of the DESTDIR make variable

DESTDIR is a common make idiom.  As per the GNU coding standards

  https://www.gnu.org/prep/standards/html_node/DESTDIR.html

  "DESTDIR is a variable prepended to each installed target file, like
  this:

  $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
  $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a

  The DESTDIR variable is specified by the user on the make command
  line as an absolute file name. For example:

  make DESTDIR=/tmp/stage install

  DESTDIR should be supported only in the install* and uninstall*
  targets, as those are the only targets where it is useful.

  If your installation step would normally install /usr/local/bin/foo
  and /usr/local/lib/libfoo.a, then an installation invoked as in the
  example above would install /tmp/stage/usr/local/bin/foo and
  /tmp/stage/usr/local/lib/libfoo.a instead."

The current Makefile.in uses DESTDIR, but has a slightly non-standard
behavior: the target install location doesn't include "$prefix".  This
breaks package managers, because stuff ends up getting installed to
the wrong location.

Unfortunately the only way I can think of to fix this involves
silently changing the behavior of DESTDIR.  Hopefully nobody is using
it...?

[port of 8a2088b59162fe16c16d26ddc1cfcaaaa8c4156f in riscv-fesvr]

9 years agoUpgrade to privileged architecture 1.7
Andrew Waterman [Sat, 9 May 2015 23:12:07 +0000 (16:12 -0700)]
Upgrade to privileged architecture 1.7

9 years agoFix commit log for CSR instructions
Andrew Waterman [Thu, 30 Apr 2015 21:31:25 +0000 (14:31 -0700)]
Fix commit log for CSR instructions

9 years agoFix I$ simulator hit count
Andrew Waterman [Sun, 26 Apr 2015 00:51:23 +0000 (17:51 -0700)]
Fix I$ simulator hit count

Also, improve performance by allowing the soft-ITLB to refill.

9 years agoMerge pull request #18 from wsong83/master
Andrew Waterman [Tue, 14 Apr 2015 22:46:30 +0000 (15:46 -0700)]
Merge pull request #18 from wsong83/master

fix cache line index offset in cachesim.cc

9 years agofix cache line index offset in cachesim.cc
Wei Song [Mon, 13 Apr 2015 15:35:13 +0000 (16:35 +0100)]
fix cache line index offset in cachesim.cc

9 years agoFix autoconf for RHEL6
Andrew Waterman [Thu, 9 Apr 2015 18:25:07 +0000 (11:25 -0700)]
Fix autoconf for RHEL6

9 years agoCheck for F extension when accessing FCSR
Andrew Waterman [Sat, 4 Apr 2015 22:17:13 +0000 (15:17 -0700)]
Check for F extension when accessing FCSR

9 years agoSupport setting ISA/subsets with --isa flag
Andrew Waterman [Sat, 4 Apr 2015 04:53:22 +0000 (21:53 -0700)]
Support setting ISA/subsets with --isa flag

Default is RV64IMAFDC.  Can do things like

  --isa=RV32 (which implies IMAFDC)
  --isa=IM (which implies RV64)
  --isa=RV64IMAFDXhwacha

9 years agoSimplify RV32 comparisons
Andrew Waterman [Thu, 2 Apr 2015 21:23:30 +0000 (14:23 -0700)]
Simplify RV32 comparisons

No need to eliminate the upper 32 bits of the 64-bit x-register, as all
RV32 instructions should sign-extend their results to 64 bits.

9 years agoAllow writing mstatus.fs even if FPU isn't present
Andrew Waterman [Tue, 31 Mar 2015 23:07:56 +0000 (16:07 -0700)]
Allow writing mstatus.fs even if FPU isn't present

This allows the OS to track FP state dirtiness.

9 years agoImplement RVC draft
Andrew Waterman [Tue, 31 Mar 2015 03:28:55 +0000 (20:28 -0700)]
Implement RVC draft

9 years agoSerialize counters without throwing C++ exceptions
Andrew Waterman [Thu, 26 Mar 2015 07:28:10 +0000 (00:28 -0700)]
Serialize counters without throwing C++ exceptions

Ideally, a similar mechanism will apply to target machine exceptions.

9 years agoNew virtual memory implementation (Sv39)
Andrew Waterman [Tue, 24 Mar 2015 22:29:43 +0000 (15:29 -0700)]
New virtual memory implementation (Sv39)

9 years agoUpdate state.pc on every instruction
Andrew Waterman [Thu, 26 Mar 2015 06:01:54 +0000 (23:01 -0700)]
Update state.pc on every instruction

This isn't a bug fix for Spike proper, but it makes it possible for
RoCC instructions to access the control thread's PC.

9 years agoFor misaligned fetch, set mepc = addr of branch/jump
Andrew Waterman [Sat, 21 Mar 2015 06:11:49 +0000 (23:11 -0700)]
For misaligned fetch, set mepc = addr of branch/jump

9 years agobugfix, mbadaddr should be writable
Yunsup Lee [Tue, 17 Mar 2015 11:33:17 +0000 (04:33 -0700)]
bugfix, mbadaddr should be writable

9 years agochange hwacha cause to follow risc-v cause
Yunsup Lee [Tue, 17 Mar 2015 11:32:53 +0000 (04:32 -0700)]
change hwacha cause to follow risc-v cause

9 years agoMerge [shm]call into ecall, [shm]ret into eret
Andrew Waterman [Tue, 17 Mar 2015 08:19:40 +0000 (01:19 -0700)]
Merge [shm]call into ecall, [shm]ret into eret

9 years agobugfix in raising accelerator interrupts
Yunsup Lee [Mon, 16 Mar 2015 09:01:26 +0000 (02:01 -0700)]
bugfix in raising accelerator interrupts

9 years agovxcptsave->vxcptevac,vxcptrestore->vxcpthold
Yunsup Lee [Mon, 16 Mar 2015 08:59:55 +0000 (01:59 -0700)]
vxcptsave->vxcptevac,vxcptrestore->vxcpthold

this change was necessary since the impl csr is gone.