# MPACT-RiscV

MPACT-RiscV is an implementation of an instruction set simulator for the RiscV
instruction set architecture created using the
[MPACT-Sim](https://github.com/google/mpact-sim) simulator tools and framework,
for which there are tutorials at
[Google for Developers](https://developers.google.com/mpact-sim).

The instruction set is described in a set of `.isa` files, and the instruction
encoding in a corresponding set of `.bin_fmt` files. The instruction semantics
are implemented in a set of of functions distributed over a large set of C++
files `*_instructions.{cc,h}`.

The top level simulator control is implemented in `riscv_top.{cc,h}`, and the
simulators are instantiated from main in `rv{32,64}g_sim.cc`.

## Building

### Bazel

MPACT-Sim utilizes the [Bazel](https://bazel.build/) build system. The easiest
way to install bazel is to use
[Bazelisk](https://github.com/bazelbuild/bazelisk), a wrapper for Bazel that
automates selecting and downloading the right version of bazel. Use `brew
install bazelisk` on macOS, `choco install bazelisk` on Windows, and on linux,
download the Bazelisk binary, add it to your `PATH`, then alias bazel to the
bazelisk binary.

### Java

MPACT-Sim depends on Java, so a reasonable JRE has to be installed. For macOS,
run `brew install java`, on linux `sudo apt install default-jre`, and on Windows
follow the appropriate instructions at [java.com](https://java.com).

### Build and Test

To build the mpact-sim libraries for x86 based processors, use the command
`bazel build ...:all` from the top level directory. To run the tests, use the
command `bazel test ...:all`.

For Apple computers with Arm64 M series chips, use `bazel build
--cpu=darwin_arm64 ...:all` and `bazel test --cpu=darwin_arm64 ...:all`.

The build targets `rv32g_sim` and `rv64g_sim` provide RiscV simulators for the
32 bit and 64 bit variants of RiscV scalar architectures respectively. Decoding
and execution support for vector instructions is included, but has not been
built into these targets, though adding them to these simulators is not
particularly daunting.
